Yahoo! Axisの秘密鍵を読んでみる
Yahoo! AxisというWebブラウザ用拡張機能とiOSアプリが公開された。Yahoo!のWebブラウザだ (そしてGoogleに挑戦している)、という触れ込みがニュースに流れたが、quick answersの面白さはあるものの、Webブラウザという表現は適切ではなく、Webブラウザの上で動きWeb体験を提供する何か、だと思う。
拡張機能に秘密鍵ファイルが同梱されていることが話題になったので、早速抜き出してみた。抜き出すのは簡単で、Google Chromeに拡張機能をインストールしてユーザ設定ディレクトリに展開された拡張機能ディレクトリから取ってくればいい。Axisは他にも色々セキュリティ的に危ない出来になっているので、インストールを推奨せず(晒し者にするためか)ファイルを配布している人もいる。
拡張機能の中身を見てみると、build.xml
があり、ビルドツールにantを使っていたことが分かる。Chrome Web Store経由の配布ではなく、Yahoo!のサーバから配布するために、拡張機能をパックするtargetが定義されている。その際に、Yahoo!が作成したものであることを証明するための秘密鍵を読ませる必要があり、build.xml
と同じディレクトリに置いていたことで、今回のようなミスが発生したと考えられる。
ところで、拡張機能.crxというパックされたファイルには、証明書(the author's RSA public key)が埋め込まれている。
試しに、この埋め込まれた証明書と、うっかり公開されてしまった秘密鍵が、本当に対応しているのか確認してみた。
証明書と秘密鍵が対応している(正しいペアである)かどうかは、各データのmodulusフィールドが同じかどうかであることで確認できる。
$ python check_keys.py warning [YAxis_Chrome_v1_0_20120520.crx]: 306 extra bytes at beginning or within zipfile (attempting to process anyway) Public key modulus: D609E9C990D38EFADFB21AFBD227EDBAFCFE4C2E6A9ECE84B0A95DF9914E93DC832B7A70BF07FFE1D29317544EE57B6F249E740707919C364340FFD05F1EB2E2A5C321D8447BFBC4D18FA97C5E6ABB24AF3D60F0C37E46D2C820522EE2BE1ECB0D528B7A2A9C9309EC1E542A06BCFAFF2A3239C0F739F8C54E7BD9C5B52BEA65 Private key modulus: D609E9C990D38EFADFB21AFBD227EDBAFCFE4C2E6A9ECE84B0A95DF9914E93DC832B7A70BF07FFE1D29317544EE57B6F249E740707919C364340FFD05F1EB2E2A5C321D8447BFBC4D18FA97C5E6ABB24AF3D60F0C37E46D2C820522EE2BE1ECB0D528B7A2A9C9309EC1E542A06BCFAFF2A3239C0F739F8C54E7BD9C5B52BEA65 match!
modulusの値が同一なので、確かにこの秘密鍵は拡張機能の証明書に用いられていたものである、ということが分かった。
Yahoo included their cert private key inside the Axis Chrome extension.. (means anybody can sign extension as yahoo).. : netsecにある通り、この秘密鍵を用いることで、誰でもYahoo!の証明書付きの拡張機能を作ることが出来る。うまくすれば、このYahoo! Axis拡張機能を偽の拡張機能で置き換えることが出来るかもしれない (Yahoo! Axis拡張機能のpermissionsは [ "cookies","history","tabs","management","webNavigation","http://*/*","https://*/*"]
となっていて、我々の情報がYahoo! Axisに対しほぼ全開になっている)。
クールではないとか、Webの縮図だとか、色々言われているYahoo!だが、こういう甘さが本当に残念。