
python と rust で作られた dlink の脆弱性ツール
だって、理由なんてないから
cve-2024-10914 は最近発見された、一部の dlink ルーターに影響を与える深刻度 9.8 の重大な脆弱性です。これらのルーターは EOL(サポート終了)に達しているため、dlink はこの脆弱性のパッチ適用を拒否しています。その言い分は「貧乏人は諦めて新しいルーターを買え」といったところです。
影響を受けるデバイスは、通常 /cgi-bin/account_mgr.cgi?cmd=cgi_user_add&name=<user_input> の下に HTTP エンドポイントを公開しています。サニタイズ処理が不適切なため、アプリケーションは入力を厳密に制限・検証する(英数字のみを許可する)代わりに、任意の文字の注入を許可しています。これにはコマンドライン操作に使用される特殊文字も含まれるため、任意のコード実行が可能になります。
name フィールドにシェルメタ文字(; | & や $(command) など)を挿入するだけで、誰でも簡単にシェルコマンドを実行できます。例えば:
...name=admin'; echo 'get pwned bozo'; #
これらのスクリプトがやっていることは、実行したい任意のコードに name パラメータを変更してリクエストを送信するだけです。
fireship による、この脆弱性をより詳しく解説したなかなか良い動画があります:https://www.youtube.com/watch?v=52v6gKPA4TM
まず、影響を受けるデバイスが必要です。対象モデルの一部は以下の通りです:
このスクリプトを、同意なしに他人に対して使用することは強くお勧めしません。このようなことは、ルーターを所有しているか、所有者の同意を得ている場合にのみ行ってください。
cargo run -- -u http://<device ip address>
cargo run
pip install -r requirements.txt
python main.py -u http://<device ip address>
python main.py
あとは指示に従ってください。
元のコードを考案したのは私ではなく、verylazytech 氏です。私はそれを Rust と Python に移植しただけです。だって、やらない理由なんてないから。もちろん、すべての功績は彼と、このエクスプロイトの発見に関わった他のすべての人に帰属します。