FixVibe
Covered by FixVibehigh

JWT सुरक्षा: असुरक्षित टोकन र छुटेको दाबी प्रमाणीकरणको जोखिम

JSON वेब टोकन (JWTs) ले दावीहरू स्थानान्तरण गर्नको लागि एक मानक प्रदान गर्दछ, तर सुरक्षा कठोर प्रमाणीकरणमा निर्भर गर्दछ। हस्ताक्षर, म्याद सकिने समय, वा अभिप्रेत दर्शकहरू प्रमाणीकरण गर्न असफल हुँदा आक्रमणकारीहरूलाई प्रमाणीकरण वा टोकनहरू पुन: प्ले गर्न अनुमति दिन्छ।

CWE-347CWE-287CWE-613

आक्रमणकारी प्रभाव

अनुचित JWT प्रमाणीकरणले आक्रमणकारीहरूलाई दावीहरू जाली गरेर वा म्याद सकिएको टोकनहरू [S1] पुन: प्रयोग गरेर प्रमाणीकरण संयन्त्रहरूलाई बाइपास गर्न अनुमति दिन्छ। यदि सर्भरले मान्य हस्ताक्षर बिना टोकनहरू स्वीकार गर्दछ भने, आक्रमणकर्ताले विशेषाधिकारहरू बढाउन वा कुनै पनि प्रयोगकर्ता [S1] प्रतिरूपण गर्न पेलोड परिमार्जन गर्न सक्छ। यसबाहेक, म्याद समाप्ति (exp) दाबी लागू गर्न असफल हुँदा आक्रमणकर्ताले एक सम्झौता टोकन अनिश्चितकालको लागि [S1] प्रयोग गर्न अनुमति दिन्छ।

मूल कारण

JSON वेब टोकन (JWT) एक JSON-आधारित संरचना हो जुन दावीहरू प्रतिनिधित्व गर्न प्रयोग गरिन्छ जुन डिजिटल रूपमा हस्ताक्षर गरिएको वा अखण्डता सुरक्षित [S1] हो। सुरक्षा विफलताहरू सामान्यतया दुई प्राथमिक कार्यान्वयन अंतरालहरूबाट उत्पन्न हुन्छन्:

  • असुरक्षित JWTs को स्वीकृति: यदि कुनै सेवाले हस्ताक्षर प्रमाणीकरणलाई कडाईका साथ लागू गर्दैन भने, यसले "असुरक्षित JWTs" लाई प्रक्रिया गर्न सक्छ जहाँ हस्ताक्षर अनुपस्थित छ र एल्गोरिदम "कुनै पनि छैन" [S1] मा सेट गरिएको छ। यस परिदृश्यमा, सर्भरले तिनीहरूको अखण्डता [S1] प्रमाणित नगरी पेलोडमा दाबीहरूलाई विश्वास गर्दछ।
  • दावी प्रमाणीकरण छुटेको: exp (समय समाप्ति समय) दावीले JWT लाई [S1] प्रशोधन गर्नको लागि स्वीकार गरिनु हुँदैन वा पछिको समय पहिचान गर्दछ। aud (दर्शक) दावीले टोकन [S1] को उद्देश्य प्राप्तकर्ताहरूलाई पहिचान गर्दछ। यदि यी जाँच गरिएन भने, सर्भरले टोकनहरू स्वीकार गर्न सक्छ जुन म्याद सकिएको छ वा फरक एप्लिकेसन [S1] को लागि लक्षित थियो।

कंक्रीट फिक्सहरू

  • क्रिप्टोग्राफिक हस्ताक्षरहरू लागू गर्नुहोस्: कुनै पनि JWT अस्वीकार गर्न अनुप्रयोग कन्फिगर गर्नुहोस् जसले पूर्व-अनुमोदित, बलियो हस्ताक्षर एल्गोरिदम (जस्तै RS256) प्रयोग गर्दैन।
  • समय समाप्ति मान्य गर्नुहोस्: exp दावी [S1] मा निर्दिष्ट समय भन्दा पहिलेको वर्तमान मिति र समय सुनिश्चित गर्न अनिवार्य जाँच लागू गर्नुहोस्।
  • दर्शक प्रमाणित गर्नुहोस्: aud दावीमा स्थानीय सेवा पहिचान गर्ने मान समावेश छ भनी सुनिश्चित गर्नुहोस्; if the service is not identified in the aud claim, the token must be rejected [S1].
  • रिप्ले रोक्नुहोस्: jti (JWT ID) दावी प्रयोग गर्नुहोस् प्रत्येक टोकनमा एक अद्वितीय पहिचानकर्ता तोक्न, सर्भरलाई पुन: प्रयोग गरिएका टोकनहरू ट्र्याक गर्न र अस्वीकार गर्न अनुमति दिँदै [S1]।

पत्ता लगाउने रणनीति

JWT ह्यान्डलिंगमा कमजोरीहरू टोकन संरचना र सर्भर प्रतिक्रिया व्यवहारको विश्लेषण गरेर पहिचान गर्न सकिन्छ:

  • हेडर निरीक्षण: alg (एल्गोरिदम) हेडरलाई "कुनै पनि" मा सेट गरिएको छैन र अपेक्षित क्रिप्टोग्राफिक मानकहरू [S1] प्रयोग गर्दछ भनेर सुनिश्चित गर्न जाँच गर्दै।
  • दावी प्रमाणीकरण: JSON पेलोड [S1] भित्र exp (समय समाप्ति) र aud (दर्शक) दावीहरूको उपस्थिति र वैधता पुष्टि गर्दै।
  • प्रमाणीकरण परीक्षण: exp दावी अनुसार म्याद सकिएको वा aud दावी aud दावी द्वारा परिभाषित गरिए अनुसारको म्याद सकिएका टोकनहरूलाई सर्भरले सही रूपमा अस्वीकार गर्छ भने परीक्षण।