やられアプリ BadTodo - 16 バッファオーバーフロー

前回:やられアプリ BadTodo - 15 アクセス制御や認可制御の欠落 - demandosigno

現在のウェブアプリケーションのほとんどはPHPやPerl、Javaなどの直接メモリを操作できない言語を使っており、バッファオーバーフローの脆弱性の影響を受ける可能性は低いといえますが、PHPやPerl、Javaのライブラリの中にはバッファオーバーフローの脆弱性が存在していたものがあります。』
安全なウェブサイトの作り方 p.44:1.10 バッファオーバーフロー

徳丸さんも「脆弱性てんこ盛り やられアプリ Bad Todo 公開の儀」で『PHPなのでアプリケーション的なバッファオーバーフローはないんですが、そういうソフトウェアが使われているということで。これは安全なウェブサイトの作り方の趣旨とも合致しています』とのことです。
脆弱性てんこ盛り やられアプリ Bad Todo 公開の儀 - YouTube

確認

さてどうやって確認しよう?となったのですが手持ちでできそうなことがNessusでのスキャンくらいしかなかったのでそうしました。
Docker版のBadTodoを使っているためNessusもDocker版を探したのですが、Nessus EssentialsのDocker版がうまくインストールできなかったり、ポート指定でのスキャンがうまくいかなかったりして最終的に「安全なWebアプリケーションの作り方、実習用環境 wasbook VirtualBox用 Ver 1.0.4 に含まれている BadTodo」を対象にしました。

結果を確認。たくさん出ています。

一番上のもの


CVSS 10.0 Critical PHP 5.3 < 5.3.7 Multiple Vulnerabilities
説明:
バナーによると、リモートホスト上で動作している PHP 5.3.x のバージョンは 5.3.7 より前のものです。そのため、以下の脆弱性の影響を受けます:

-socket_connect() におけるスタックベースのバッファオーバフロー(CVE-2011-1938)   -crypt() におけるバッファオーバフロー(CVE-2011-3268)

対処法:
PHP 5.3.7 以降にアップグレードしてください。


そして、結果一覧から「buffer overflow」とついているものを全て抜き出すと次の通り。(重複を除く)(deeplで翻訳)


-socket_connect() におけるスタックベースのバッファオーバフロー。(CVE-2011-1938)
-crypt() におけるバッファオーバフロー。(CVE-2011-3268)
-ファイル 'main/streams/streams.c' の関数 '_php_stream_scandir' に、特定できないオーバーフローの脆弱性が存在します。(CVE-2012-2688)

-C の関数 'xbuf_format_converter' において、PHP の設定値 'precision' が大きな値に設定されている場合にバッファオーバーフローのエラーが発生し、 アプリケーションがクラッシュする可能性があります。(CVE-2011-1464)
-ファイル 'ext/phar/tar.c' 内の関数 'phar_parse_tarfile' に整数オーバーフローエラーが存在します。このエラーは、悪意を持って細工された TAR ファイルを処理する際に、 ヒープベースのバッファオーバーフローを引き起こす可能性があります。このエラーにより、任意のコードが実行される可能性があります。(CVE-2012-2386)
-ヒープベースのバッファオーバーフローエラーが 'ext/date/lib/parse_iso_intervals.c' に存在し、DateInterval オブジェクトの処理に関連するため、サービス拒否攻撃が可能です。(CVE-2013-6712)

-関数 'dns_get_record' にヒープベースのバッファオーバーフローエラーが存在し、任意のコードを実行される可能性があります。(CVE-2014-4049)
-getSymbol() に整数オーバーフローの脆弱性。(CVE-2010-4409)
-GD 拡張の 'imagepstext()' 関数にスタックベースのバッファオーバフローが存在する。(Bug #53492 / CVE-2010-4698)

-関数 '_pdo_pgsql_error' にバッファオーバーフローのエラーが存在します。(Bug #64949)
-ファイル 'ext/standard/quot_print.c' 内の関数 'php_quot_print_encode' にエラーが存在し、特定の文字列を解析しようとした際に ヒープベースのバッファオーバフローが発生する可能性があります (Bug #64879)。


「関数○○における」とあるように、その関数を使っていなければ問題ありません。

BadTodo内を簡単に検索した範囲では見つかりませんでした。

(先日まで「TCP.phpというファイル内にsocket_connect()があった」と記載していましたが誤りでした。まったく別のプロジェクトのファイルを引っかけてしまっておりました)

次回:やられアプリ BadTodo - 17 認証(パスワードの強度・ログアウト) - demandosigno

/* -----codeの行番号----- */