
استغلال لإثبات المفهوم (Proof-of-concept) لثغرة CVE-2026-21003 يوضح تجاوز المصادقة في JWT من خلال حذف ترويسة kid واستخدام خوارزمية 'none' لانتحال هوية المستخدمين.
// 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
يُظهر الرد مصادقة ناجحة كمسؤول.