Nodejsでjwtの脆弱性であるalg=none攻撃をテストサーバで実装してみたいのですが、うまくいきません。
ライブラリは、
です。
下記のコードで署名抜きのjwtを認証しているのですがalg=none攻撃が成功しません。
const jwt = require("jsonwebtoken"); const fs = require("fs"); const PUBLIC_KEY = fs.readFileSync("../publicKey.pem"); // 公開鍵 let token = "eyJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjogIueUsOS4rSJ9.Tvowrr98fHxyHjRtzHKe58cBP7vWUzYvRXRTS1e4zZNWUqDopnRf4fAZ9cbcx8ovvj9NZetqo1lz6eQK2hsF6Q"; const secretsOrPrivateKey = PUBLIC_KEY; jwt.verify(token, secretsOrPrivateKey, (err, decoded) => { if (err) { console.log("jwtの解読に失敗しました"); } else { console.log(decoded); } });
どなたかわかる方はいませんでしょうか?
テスト用なのでAPI通信はしていません。
このコマンドから実行しています。
node test.js
jwtのヘッダとペイロードは
header = {"alg": "RS256"} payload = {"user": "田中"}
になり、
この結果が返ってきます。
{ user: '田中' }
ここで、jwtを以下に変更して、署名を削除し、再度base64でエンコードし
header = {"alg": "none"} payload = {"user": "admin"}
再度base64でエンコードしjwt
token = "eyJhbGciOiAibm9uZSIsICJ0eXAiOiAiSldUIn0.eyJ1c2VyIjogImFkbWluIn0."
でalg=noneの脆弱性のテストをすると、
jwtの解読に失敗しました
と出てしまいます。
ソースコードだけではなく、どのような入力値を与えて、どのような結果になるかを追記してください。
回答1件
あなたの回答
tips
プレビュー