CVE-2015-3210」2015年06月06日せーの(269)26この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、せーのです。今日は結構影響の大きそうな脆弱性についての詳細な説明と現時点での対応状況をお知らせ致します。required」なんてエラーメッセージを見たことのある方もおおいのではないでしょうか。どんな脆弱性?今回の脆弱性は「CVE-2015-3210」という識別番号がついておりまして、内容としては「ヒープオーバーフロー」につながる脆弱性です。PCREライブラリはC言語で実装されているのですが、正規表現処理compile_regex()を行う際に、mallocに割り当てられたサイズより大きなサイズが書きこまれてしまう、という脆弱性を使って任意のコードが実行できてしまう、というのが今回の脆弱性です。具体例もう少し具体的に見て行きましょう。今回の脆弱性は次のようなコードの実行時に引き起こされやすくなります。/^(?P=B)((?P=B)(?J:(?P<B>c)(?P<B>a(?P=B)))>WGXCREDITS)/どうでしょう。わかるような、わからないような。実際の言語で書くとどうなるでしょう。8.37を使用)で書くとこんな感じになります。<?phppreg_match("/^(?P=B)((?P=B)(?J:(?P<B>c)(?P<B>a(?P=B)))>WGXCREDITS)/","ADLAB",$arr);?>ちょっと見慣れた感じになりました。これを実行したらこういう流れになります。PHPのpreg_match()関数がPCREのpcre_compile2リンカを呼ぶpcre_compile2がcompile_regex()を呼び、まず正規表現の結果を格納するメモリサイズを計算する計算したメモリアドレスにポインタを指定するpcre_compile2がもう一回compile_regex()を呼び、正規表現の実行結果を格納するここで最初に計算したメモリサイズより実際の実行結果の容量が大きくなってしまうわけです。Linuxにて実行し、gdbを使ってヒープ領域の状態を見てみると次のようになっています。151バイトで、アドレスは0x1007480となります。2回目のcompile_regexpの実行前と実行後で0x1007480から160バイトの内容を比べてみましょう。0x00==============================================================おわかりでしょうか。実行前は0x1007480から151バイト目にあたる0x1007510の7バイト目以降はデータはないのにも関わらず実行後は*に当たる部分がオーバーフロー、つまりデータが書き込まれています。今回の例では少なくとも5バイトはオーバーフローしていることになります。この脆弱性でヒープ領域に書き込まれた隣のフィールドに任意のデータを書き込むことができ、リモートによる攻撃が可能になる、というわけです。10.102015/06/06(JST)現在の対応状況PCREライブラリまずは根本原因であるPCREライブラリです。10.10も対象となります。PCRE2共に修正されています。OSには対応した形跡が見られませんでした。debianのセキュリティページも特に動いているようには見えませんし、RHELのバグジラには「正規表現が原因のクラッシュはセキュリティ事象として取り扱わない」というようなコメントがあったり、なんか出足が遅い気がします。ヒープオーバーフロー自体が脆弱性としては軽い、と見られているのでしょうか。それともまだテスト段階なのでしょうか。SecurityによるとOSのPCREライブラリがアップデートされていれて、それとリンクしたPHPなら安全です。PHP本体のバンドル版PCREは5月リリースで更新されています。バンドル版を使ったPHPの場合は最新リリース版のみ安全です!ということなのですが、「RHEL/FedoraでPCREライブラリがアップデートされている」「PHPのバンドル版PCREのアップデートが脆弱性をfixしたものである」というものを見つけることが出来ませんでした。伝聞レベルを出ませんが、最新版なら安全、とのことです。まとめいかがでしたでしょうか。ちなみに上のコードですが「WGXCREDITS」じゃなくても「AAAAAAAAAA」でも構いません。要は10文字の文字列であればいいようです。ちなみに今回はPCREのヒープオーバーフローについてでしたが、PCREはスタックオーバーフローにも脆弱性が報告されています。ユーザーに正規表現を許可しているサイトを運営されている方はもちろん、ユーザーリクエストをそのまま無処理で正規表現に突っ込むような実装をしているシステムも一旦内容を見なおしたほうが安全かと思います。2,693,328せーのと申します。北海道にて犬2匹とともにのんびりコードを書いたりしています。最近は触れるデバイスをネットにつなげて遊ぶのにはまっています。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。EC2)環境において、不要な踏み台サーバをなくすことができる便利なアップデートです。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介252SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健232こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。カフェ店長のオカノです。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。