Loading...
Loading...
Authorization bypass by modifying JWT claims when signature is not properly validated.
1const jwt = require('jsonwebtoken');23app.get('/api/admin/users', (req, res) => {4 const token = req.headers.authorization?.split(' ')[1];56 // Decode without verification7 const decoded = jwt.decode(token);89 if (decoded.role !== 'admin') {10 return res.status(403).json({ error: 'Admin access required' });11 }1213 // Return all users14 const users = db.users.find({});15 res.json(users);16});
Using jwt.decode() instead of jwt.verify() allows attackers to modify token claims without detection. The "none" algorithm attack removes signature verification entirely.
Modify JWT claims and remove signature
Original: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiIxMjMiLCJyb2xlIjoidXNlciJ9.signature
Modified: eyJhbGciOiJub25lIn0.eyJ1c2VySWQiOiIxMjMiLCJyb2xlIjoiYWRtaW4ifQ.Attacker gains admin access without valid credentials