Not only is the Internet dead, it's starting to smell really bad.:2014年06月26日分

2014/06/26(Thu)

[Citrus][FreeBSD][Security] FreeBSD-SA-14:15およびCVE-2014-3951 について(その1)

@重要なお知らせ

えーとCitrus iconvについて FreeBSD-SA-14:15なるものが出ています、より一般的には CVE-2014-3951の番号が割り当てられるYoですが、こっちは未だ未公開(馬に乗馬)かな?

@影響範囲

最も最悪(馬に乗馬)のケースとしては「リモートからのサービス拒否」攻撃が成立します。 これがツンデレ妹からのサービス拒否であればMッ気ムンムンのやきうのお兄ちゃん彡(゚)(゚)絶頂なんですが、まぁさっさと対策してどうぞ。

にぃに…にぃに…んちゅ…んちゅ…

今日時点でCitrus iconvを導入しているOSは現状

  • NetBSD (=Citrus本家)
  • FreeBSD
  • DragonFlyBSD

の3つのはず *1ですが、問題が発生するのはFreeBSDとDragonFlyBSDだけで NetBSD (=Citrus本家)には影響はありません*2これ重要なのでふっといふっとい字にしておきました、詳しい話はまた後で後述、馬に乗馬。

@発生しうる条件

文字コード変換をiconv(3)ないしiconv(1)に投げてるアプリとかスクリプトは全て影響受けます、最近は多いよね。

UTF-8とUCS4の相互変換だけに限定利用してるとかなら今回の問題には影響ないのですが、攻撃者が以下のいずれかの文字コードを選択可能だとダメっす。

  • Big5-2003, Big5-E, Big5-Eten, Big5-IBM, Big5-Plus, CP950(台湾)
  • Big5-HKSCS(香港)
  • HZ, HZ8(中国)
  • VIQR(ベトナム)

ユーザ入力を制限してなければこれのうちどれか選ぶだけでアウトだし、絞ってたとしても台湾と香港のBig5系はデファクトスタンダードなのでまずダメでしょう。影響範囲大きいと思います。

お使いのFreeBSD/DragonFlyBSDに問題が有るか無いかの確認はiconv(1)で簡単に試験を試みられるれろなのでやってみませう。

$ echo "opie vuln vuln" | iconv -f CP950 -t UTF-8
Segmentation fault (core dumped)

$ echo "opie vuln vuln" | iconv -f HZ -t UTF-8
Segmentation fault (core dumped)

$ echo "opie vuln vuln" | iconv -f VIQR -t UTF-8
Bus error (core dumped)

ひえっ、ちなこの結果はFreeBSD 10-RELEASE。オフコースもちろんNetBSDでは問題ありません。

@バタフライ効果による熱い風評被害を受けるアプリケーション達

影響を受けそうなサービス系のアプリとしては、脆弱性の西の横綱、 BINDのidnkitがiconv(3)使って国際化ドメイン名変換やってるようね。 idnalias.confにBig5とかあるし影響不可避っぽいです。

東の横綱 Apache HTTP ServerAPR(Apache Portable Runtime)で自前の文字コード変換 *3を抱えてるので大丈夫なはず、native iconv使うオプションあったっけ?

それと東前頭の SambaもUSE_NATIVE_ICONVだとmount_cifsのオプションでcodepageにCP950を指定したりするとダメそう。

また DovecotCourie-IMAPみたいなMDAに対して問題の起きる文字コードなメール投げるだけで気軽にリモートDoSできる可能性があります。

あと libxmlもiconv依存だし GNOMEあたりのアプリも軒並みクラッシュさせられそうやね、よう知らんけど(大阪人)。

わあい(白目)。

それ以外にも、昨今はgettext(3)みたいなメッセージカタログ機能もiconv(3)を内部的に使っとります *4。なんでlibintlをリンクしていればLANG環境変数を汚染することで攻撃可能ですやね。 ウェプアプリケーションフレームワークなんかも p5-Locale-gettextPHP-gettextあたりでUIの国際化をしてた場合、Big5系を選ぶとmod_perlとかphp-apc/fpmあたり巻き込んで死にそう *5

やっぱりdjb先生みたいにlibcなんか信用できるかksgが正義なんですかね(ぉ

@ワイ、責任を取ってharakiriするべきか調査開始。

こんな影響範囲の広いCVE出すような脆弱性を出した場合「これは harakiriやろうなぁ」とCitrusの偉い人も仰せになられておりますので。

SA番号が14と15の二つが割り当てられてることからとおり、問題は2つありますので次回はそれぞれについて解説しなぜNetBSDでは発生しなかったのかを解説する予定 *6

*1:めんどいので確認してないけどMacOS X/Darwin、Minux3、QNXあたりも微レ存、でも俺は嫌な思いはしてないから。
*2:だけどspz氏がこのFreeBSDでの patchをあたるところだけ(rejは無視して) commitしてくれやがってるので、NのSecurity Officerが検証せずにNetBSD-SAを出す可能性もあるけどね、タノシミダナー(棒)。
*3:最近はそれを使ってiconvをエミュレートするAPR iconvというものも出してるし。
*4:本来のCSI思想なら無用なんですがUnicode Hardwire野郎共の時代だししゃーない
*5:まぁ今時この手のウェブアプリでUTF-8以外使ってるようなところはなさそうだけども。
*6:すでにtwitterではネタばらし済ですがまー誰もあんなチラシの裏以下の下水垂れ流し読んでないだろう。