
CVE-2026-4444 के लिए POC जो अविश्वसनीय kid इंजेक्शन के माध्यम से JWT एल्गोरिदम भ्रम को प्रदर्शित करता है, जिसमें टोकन जालसाजी और विशेषाधिकार वृद्धि के लिए असुरक्षित Node.js सर्वर और Python एक्सप्लॉइट शामिल है।
// jwt_server.js - Vulnerable JWT verification server
const express = require('express');
const jwt = require('jsonwebtoken');
const jwksClient = require('jwks-rsa');
const axios = require('axios');
const app = express();
app.use(express.json());
// Normally fetches public key from a JWKS endpoint, but vulnerable kid handling
async function getPublicKey(kid) {
// Attacker can inject a kid that points to their own URL
if (kid.startsWith('http://') || kid.startsWith('https://')) {
// Fetch the key from attacker-controlled URL (INSECURE!)
const response = await axios.get(kid);
return response.data.publicKey; // expects PEM
}
// Otherwise use local JWKS (simulated)
return `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1SU1LfVLPHCYZM5rPY4
...
-----END PUBLIC KEY-----`;
}
app.post('/api/verify', async (req, res) => {
const token = req.body.token;
const decoded = jwt.decode(token, { complete: true });
const kid = decoded.header.kid;
try {
const publicKey = await getPublicKey(kid);
const payload = jwt.verify(token, publicKey, { algorithms: ['RS256','HS256'] });
res.json({ status: 'authenticated', user: payload.sub });
} catch (e) {
res.status(401).json({ error: e.message });
}
});
app.listen(3000, () => console.log('JWT server on :3000'));
एक JWT सत्यापन सेवा सार्वजनिक कुंजी का पता लगाने के लिए kid हेडर पर आँख बंद करके भरोसा करती है, जिससे हमलावर अपनी स्वयं की कुंजी की ओर इशारा करने वाला URL प्रदान कर सकता है। इससे पूर्ण टोकन जालसाज़ी और विशेषाधिकार वृद्धि होती है।
kid URI से सार्वजनिक कुंजी प्राप्त करता है, बिना यह सत्यापित किए कि वह किसी विश्वसनीय स्रोत से संबंधित है।node jwt_server.js
python exploit_jwt_kid.py