この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

Firefoxのアドオン署名検証を無理やりOFFにする

近頃僕が投稿する記事は、

「本来できない処理を、無理やりパッチを当てて強引になんとかする」

的なのが多いですね。

そして今日もそんな内容でございます。

今日のお題

ウチはSeleniumでガチなE2Eテストを全案件でやっており、Jenkins上では膨大なSeleniumスクリプトが24H365Dで動作しているという話を以前書きました。

takahashikzn.root42.jp


しかし残念ながらウチのSeleniumテスト基盤はSelenium-RCベースです。 WebDriverベースではありません。ダサいですね。

その理由はこちらにも書いたのですが、

「非プログラマもテスターとして戦力化しているので、Selenium IDEベースの環境を構築している」

ためです。

takahashikzn.root42.jp

アドオン開発向けFirefoxビルドがリリースされなくなった

で、Firefox48以降は署名検証が強制されたのでSelenium-RCのテストが動作できずに困っていた所*1、 アドオン開発向けFirefoxビルドを使えば回避可能ということでした。

アドオン開発者向けビルドとは、ここに配置されている特殊なビルドです。(Linuxの場合)

http://archive.mozilla.org/pub/firefox/tinderbox-builds/mozilla-beta-linux64-add-on-devel/

一旦はこのビルドを利用することで、問題を回避できたのですが…


しかしある日突然、新しいビルドがリリースされなくなってしまいました。 ビルドログを見てみると、

11:41:30     INFO -  /usr/bin/env: /tools/buildbot/bin/python: No such file or directory
11:41:30    ERROR - Return code: 127
11:41:30  WARNING - setting return code to 2
11:41:30    FATAL - 'mach build' did not run successfully. Please check log for errors.
11:41:30    FATAL - Running post_fatal callback...
11:41:30    FATAL - Exiting -1
11:41:30     INFO - [mozharness: 2017-06-22 18:41:30.864572Z] Finished build step (failed)
11:41:30     INFO - Running post-run listener: _summarize
11:41:30    ERROR - # TBPL FAILURE #
11:41:30     INFO - [mozharness: 2017-06-22 18:41:30.865049Z] FxDesktopBuild summary:
11:41:30    ERROR - # TBPL FAILURE #

とありまして、ビルドスクリプトが何かの理由で壊れて失敗するようになってます。 pythonのバイナリが見つからないというエラーが出ている。

…なんかすぐ修正できそうなものですが、メンテナーにやる気が無いのかずっと放置状態です。


さて、こうなった以上、アドオン開発者向けビルドを自前でビルドするしか道は無い。 うおーめんどくせー。と思いつつ諦めの気持ちでビルドログを詳しく見てみると、こういうエントリがありました。

11:41:30     INFO -  #add-on signing is checked but not enforced
11:41:30     INFO -  MOZ_REQUIRE_SIGNING=0
11:41:30     INFO -  ac_add_options --with-branding=browser/branding/unofficial
11:41:30     INFO -  ac_add_options --enable-update-channel=default
11:41:30     INFO -  
11:41:30     INFO -  # Need this to prevent name conflicts with the normal nightly build packages
11:41:30     INFO -  export MOZ_PKG_SPECIAL=add-on-devel
11:41:30     INFO - mozconfig content:
11:41:30     INFO - . $topsrcdir/browser/config/mozconfigs/linux64/nightly

ははあ、MOZ_REQUIRE_SIGNINGという環境変数で、アドオン開発者向けビルドか否かを制御しているのだな。 と思いつつ、軽い気持ちでMOZ_REQUIRE_SIGNINGをググってみたわけです。

そしたら見つけましたよ。答えを。

ビルド済みパッケージの中身を無理やり改変して署名検証をOFFにする

見つけたのはコレ。

gist.github.com

この簡単なスクリプトを読めばわかりますが、Firefoxのビルド済みパッケージに含まれるomni.jaというファイルの実体はZIPファイルであり、 その中のAppConstants.jsmにテキストでフラグが埋め込まれているわけです。

従ってこのファイルを直接編集して元通りに戻せば、署名検証はOFFになる。

ナイス・ダーティハックです!!


そして、実際に試してみたら見事に署名検証がOFFになりました。素晴らしい。

これでFirefox57がリリースされるまで*2、最新のFirefoxで戦えるようになりました、というお話しでした。

おしまい。

*1:Selenium-RCは内部的にFirefoxのアドオンとして動作します

*2:Firefox57以降、旧形式のアドオンが非サポートになるという特大の問題が待ち構えている