
sudoバッファオーバーフローの解析:影響を受けるsudoバージョンは1.8.26未満、および公開されているエクスプロイトをGCCでコンパイルする方法
Sudo 1.8.25p - 'pwfeedback' バッファオーバーフロー(PoC)
Sudoのpwfeedbackオプションは、ユーザーがパスワードを入力する際に視覚的なフィードバックを提供するために使用できます。キーを押すたびにアスタリスクが表示されます。このオプションは、標準のPassword:プロンプトがキー入力のエコーを無効にすることに対するユーザーの混乱への対応として追加されました。pwfeedbackは上流バージョンのsudoではデフォルトで有効になっていませんが、Linux MintやElementary OSなどの一部のシステムでは、デフォルトのsudoersファイルで有効にしています。
分析
Sudoバッファオーバーフロー tryhackme writeup
CVE-2019-18634の分析
まず、SSH経由でtryhackmeインスタンスにログインします
この脆弱性は、pwfeedback関数がヒープバッファオーバーフローに対して脆弱であるために発生します。この脆弱性を悪用するには、まずsudo –versionコマンドを実行して、マシンに脆弱なバージョンのsudo(sudo <1.8.26)が存在することを確認します。
CVE-2019-18634の分析
まず、SSH経由でtryhackmeインスタンスにログインします
この脆弱性は、pwfeedback関数がヒープバッファオーバーフローに対して脆弱であるために発生します。この脆弱性を悪用するには、まずsudo –versionコマンドを実行して、マシンに脆弱なバージョンのsudo(sudo <1.8.26)が存在することを確認します。

マシンに脆弱なバージョンのsudoが存在することを確認したら、次にpwfeedback関数が存在することを確認します。これは2つの方法で行えます。1つ目は、sudoを呼び出してパスワードプロンプトに何かを入力する方法で、パスワードに文字を入力すると「*」が表示されるはずです。2つ目は、より技術的な方法としてsudo -lコマンドを使用する方法ですが、これにはユーザーがsudoに関する情報を表示できる適切な権限を持っているか、sudoersファイルを連結できる権限が必要です。

次に、exploit-dbで使用されているテストケースを使用して、バッファオーバーフローが可能であることを確認します。 https://www.exploit-db.com/exploits/47995
perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id ^^上記のコード行は次のように動作します:
100個のA文字を追加してsudoコマンドにパイプし、それがpwfeedbackヒープバッファに送られます。

sudoはsudoプロセスを続行する方法がわからないため、セグメンテーションフォルトを出力します。
これは、静的ヒープバッファが溢れると、CPUレジスタと、次の命令の流れを維持する命令ポインタが溢れ始めるために発生します。
エクスプロイトを実行すると、バッファオーバーフローが発生し、システムへのrootアクセスが得られます。 https://www.exploit-db.com/exploits/47995
