
CVE-2026-21003 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो kid हेडर को हटाकर और 'none' एल्गोरिदम का उपयोग करके उपयोगकर्ताओं का रूप धारण करने के लिए JWT प्रमाणीकरण बायपास प्रदर्शित करता है।
// jwt_verify_server.js - Vulnerable JWT verification
const jwt = require('jsonwebtoken');
const express = require('express');
const app = express();
app.use(express.json());
const publicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1SU1LfVLPHCYZM5rPY4...
-----END PUBLIC KEY-----`;
app.post('/verify', (req, res) => {
const token = req.body.token;
// Vulnerability: if no algorithm specified, defaults to HS256? Actually, jsonwebtoken can be tricked.
// We simulate a custom verifier that accepts "none" if kid is missing.
const decoded = jwt.decode(token, { complete: true });
if (!decoded.header.alg || decoded.header.alg === 'none') {
// Accept token without signature
res.json({ status: 'authenticated', user: decoded.payload.sub });
} else {
jwt.verify(token, publicKey, { algorithms: ['RS256'] }, (err, payload) => {
if (err) res.status(401).send('Invalid');
else res.json({ status: 'authenticated', user: payload.sub });
});
}
});
app.listen(3000);
एक कस्टम JWT वेरिफायर यह सही ढंग से सुनिश्चित नहीं करता कि साइनिंग एल्गोरिथम उपस्थित हो। यदि टोकन का हेडर alg पैरामीटर को छोड़ देता है या स्पष्ट रूप से इसे none पर सेट करता है, तो सर्वर बिना सिग्नेचर सत्यापित किए टोकन स्वीकार कर लेता है, जिससे विशेषाधिकार वृद्धि संभव हो जाती है।
npm install express jsonwebtoken
node jwt_verify_server.js
pip install pyjwt requests
python exploit_jwt_none.py
प्रतिक्रिया admin के रूप में प्रमाणित दिखाती है।