
MitraStar GPT-2741GNACルーターにおけるOSコマンドインジェクション(CVE-2023-33381)の概念実証エクスプロイト。診断用ping/traceroute機能を介した制限付きシェルのバイパスを実証し、脆弱なCGIバイナリのリバースエンジニアリング解析を含む。
SSH でログインした後、すぐに利用可能なコマンドとオプションが限られていることに気づきました。明らかに制限されたシェル環境に閉じ込められていることがわかりました。

いくつかの既知の脆弱性を調査した後、新しい脆弱性の探索に着手することにしました。まず管理ポータルにログインし、OS コマンドインジェクションにつながる可能性のあるさまざまな機能をテストし始めました。診断メニュー内で、ping と traceroute コマンドを使用して接続をテストできる特定の機能を見つけました。


そこで、コマンドに「;」文字を追加して、こっそり試してみることにしました。"cat /etc/passwd" を実行したところ、なんとコマンドが正常に実行されました。

さらに一歩進めて、「sed」コマンドを実行し、"/etc/passwd" ファイル内の制限されたシェルのエントリを完全な対話型シェルに置き換えました。

下の画像で明確に示されているように、私が行った変更により、ログインして "uname" や "cat" などのコマンドを自由に実行できるようになりました。

管理者権限を完全に持っていたため、脆弱なコンポーネントを突き止めるためにさらに深く掘り下げずにはいられませんでした。ブラウザのリクエストを調べていると、興味深いことに気づきました。リクエストの対象となっている 2 つの CGI ファイル "ping.cgi" と "DiagGeneral.cgi" がありました。

ファイルを取得した後、Ghidra を使用してリバースエンジニアリングを楽しみました。興味深いのは、"ping.cgi" ファイル内で、PingIPAddr パラメータが適切なサニタイズなしにユーザー入力から直接取得されていることに気づきました。ユーザー入力から取得された PingIPAddr パラメータは、tcapi_set 関数を利用して将来の使用のために保存されていました。

最後に、DiagGeneral.cgi ファイルでは、PingIPAddr パラメータが tcapi_get 関数を使用して取得され、サニタイズなしで直接 system 関数で使用されていました。この欠陥によりコマンドインジェクションの脆弱性が生じ、システム上での任意のコマンドの不正実行が可能になります。
