前回:やられアプリ 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内を簡単に検索した範囲では見つかりませんでした。