
CVE-2026-90817 用の Python チェッカーおよびエクスプロイトフック。survey の __passthru ルーティングを悪用した、認証不要の重大な REDCap RCE に対応し、大量スキャンと FOFA ターゲットインポートを備えています。
CVE-2026-90817 (Securifera / Ryan Wincey) 向けの Python 3 チェッカー(および設定可能なエクスプロイトフック)。
| 製品 | REDCap (Vanderbilt) |
| 影響を受けるバージョン | ≥ 13.3.0 (ブランチパッチまで) |
| 修正済み | 16.0.49 LTS、17.3.10 LTS、17.4.4 Standard+ |
| CVSS 3.1 | 9.8 Critical |
| 認証 | 不要 — 完全なチェーンには有効な公開サーベイハッシュ(s=)が必要 |
| CWE | CWE-73、CWE-94 |
公開サーベイのコンテキストから、攻撃者は __passthru(サーベイパススルー)ルーティングを悪用して意図しないコントローラ(例: Data Import)に到達し、その後安全でないファイルパス / ストリーム処理を引き起こして RCE に至ることができます。
Securifera は完全な HTTP チェーンをまだ公開していません(リポジトリ公開時点で GitHub / Exploit-DB に公開 PoC はありません)。
| モード | 動作内容 |
|---|---|
check | REDCap フィンガープリント、バージョンヒューリスティック、有効な サーベイ(ハッシュ指定時)、 → DataImport |
exploit_chain.example.json はプレースホルダーのみ(推測されたルート/パラメータ)です。RCE は実行されません。
研究用ドライラン: --allow-placeholder-chain(リクエストを送信しますが、失敗が想定されます)。
pip install -r requirements.txtpip install -r requirements.txt
# Single target (survey hash required for survey + passthru tests)
python poc.py -u https://redcap.example.edu/redcap --hash Ab12Xy34Zq --mode check
# Shorthand: base|hash
python poc.py -u "https://redcap.example.edu/redcap|Ab12Xy34Zq" --mode check
# Mass check (one URL per line, optional |hash)
python poc.py --list targets.example.txt --mode check -j 20 -q
# Live stream: every host + test summary (recommended for long lists)
python poc.py --list targets.example.txt --mode check -j 20 -q --flow
# Exploit (after advisory → real exploit_chain.json)
cp exploit_chain.example.json exploit_chain.json # edit with real values
python poc.py -u https://redcap.example.edu/redcap --hash XXX --mode exploit -c id \
--chain exploit_chain.json
# Place export as fofa_csv_7561.csv (or any fofa*.csv), then:
python fofa_to_list.py
# Writes list.txt (gitignored) and normalizes the CSV with a url column
python poc.py --list list.txt --mode check -j 20 -q --flow
https://uni.edu/redcap|SurveyHash10
https://uni.edu/redcap?s=SurveyHash10
https://uni.edu/redcap
ハッシュがない場合でも、check は REDCap のフィンガープリントとバージョンウィンドウの検出は可能ですが、サーベイの検証やパススループローブの実行はできません。
--flow 一括チェック)
| ファイル | 内容 |
|---|---|
cve_2026_90817_results.jsonl | ターゲットごとの JSON |
hits.txt | 候補(exploitable_candidate) |
status 値(check)__passthru ルートとパラメータ名が必要です。デフォルトはプレースホルダーです。vulnerable_version は null になる場合があります。title="REDCap" の行にはサーベイハッシュがないことが多く、CVE の前提条件には公開リンクからの s= が必要です。title="REDCap"
body="redcap_version"
body="/surveys/?s="
.
├── poc.py
├── fofa_to_list.py
├── exploit_chain.example.json
├── poc.png # example --flow terminal output
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
許可されたセキュリティテストにのみ使用してください。適用法およびプログラム規則の遵守はあなたの責任です。
s=__passthruexploit | 検証済みの exploit_chain.json(プレースホルダーの例ではない)がある場合のみ実行 |
| オプション | 説明 |
|---|
-u, --url | 単一のベース URL(または URL|hash) |
--hash | 公開サーベイハッシュ(s= の値) |
--list | ターゲットファイル(1 行につき 1 つの URL または URL|hash) |
--mode | check または exploit |
--chain | exploit モード用の JSON チェーン(デフォルト exploit_chain.json) |
--allow-placeholder-chain | exploit モードでサンプル JSON を許可(実際の RCE はなし) |
-c, --command | シェルコマンド(exploit モード。動作するチェーンが必要) |
--threads, -j | 一括処理の並行数(デフォルト 15) |
--timeout | HTTP タイムアウト秒(デフォルト 25) |
--proxy | HTTP(S) プロキシ URL |
--output | JSONL 結果(デフォルト cve_2026_90817_results.jsonl) |
--vuln-list | check → hits.txt、exploit → exploited.txt |
--quiet, -q | 定期的な進捗表示を抑制 |
--flow, -f | 完了したターゲットごとに 1 行(サイト + テスト概要) |
| ステータス | 意味 |
|---|
passthru_dataimport_reachable | 有効なサーベイ + パススルールートが Data Import のようである |
passthru_probe_reachable | パススルーがブロックされていない HTTP を返した |
likely_vulnerable_version | バージョンが影響範囲内(サーベイは OK、プローブは決定的でない) |
redcap_version_hot_no_hash | 影響を受けるバージョンのヒューリスティック、サーベイハッシュ未指定 |
redcap_no_survey_hash | REDCap は OK、ハッシュなし、バージョン不明 |
patched / patched_no_survey | ブランチの修正済みバージョン以上 |
no_valid_survey | ハッシュが無効、またはサーベイが公開されていない |
no_redcap | ホストが REDCap のようには見えない |
survey_ok_version_unknown | サーベイは OK、バージョン文字列が見つからない |