2022年5月24日(米国時間)、SANS ISCのフォーラムでPython向けライブラリの1つ(その後PHP向けライブラリでも判明)が第三者により不正なコードを含むアップデートが行われていたとして注意を呼び掛ける投稿が行われました。その後この行為に関わっていたとして実行者とみられる人物が顛末を公開しました。ここでは関連する情報をまとめます。
改ざんされた2つのライブラリ
- 今回影響が確認されたのPython Package Index(Pypi.org)で公開されている「ctx」、Packagist(Packagist.org)で公開されている「PHPass」の2つ。
影響を受けたライブラリ | インストール実績 | 改ざんされたとみられる期間 | 概要 |
---|---|---|---|
ctx | 約75万回 | 2022年5月14日~5月24日頃 | 辞書(dict型オブジェクト)を操作するユーティリティを提供するPython向けのパッケージ |
phpass | 約254万回 | 2022年5月19日?~5月24日頃 | パスワードハッシュフレームワークを提供するPHP向けのパッケージ |
- SANS ISC ハンドラーのYee Ching Tok氏がReddit上に投稿されていたctxの不審な更新を取り上げているスレッド*1を受け調査したもの。ctxは2014年12月19日を最後に7年以上更新が行われておらず、2022年5月に行われた更新の際はGithub上で変更が加えられていなかった。*2
- ライブラリの改ざんを受け、PyPIの管理者は次の対応を実施。既知の攻撃への緩和策としては、所有者に対して多要素認証の使用を推奨した。またインストール時に自動的に最新のバージョンに更新する攻撃を防ぐためにversion-pinningとHash check modeの使用を推奨した。
- プロジェクト、リリース、リリースファイルをインデックスから削除
- ctxの所有者の介入なしに同名を使って再登録することを禁止
- 侵害された所有者のアカウントを凍結
AWSシークレットアクセスキーなどを外部へ送信
- 改ざんされたctxを使用していた場合、特定のドメイン
anti-theft-web.herokuapp[.]com
に対して使用しているシステム環境変数の全てを送信するよう実装が行われていた。また初期(改ざんされたctx-0.1.2)の実装ではコンピュータ―名、AWSアクセスキーID、AWSシークレットアクセスキーの3つを送信するよう実装されていた。phpassも同様の外部へ情報を送信する実装が行われていた模様。*3 - ctxは改ざんされた期間中に約2万7000件(1日平均1600回程度ダウンロードされているところ、更新後は4548件をピーク)のダウンロードが行われたことをPyPIの管理者は明らかにしているが、大半は更新後の同期を行うためPyPIのミラーによって実行されたものと見方を示している。
改ざん実行者が顛末を報告
- 改ざんの事実が発覚した翌日、2つのライブラリハッキングに関わったと実行者とする人物*4が悪意を持った行動ではないとしたうえで、一連の行為がユーザーや企業に対してどのように影響を及ぼしたかの解説と顛末をブログに公開した。
- スクレイピングツールを利用してライブラリ上から攻撃可能なパッケージの調査を行ったもので、実行者曰く合計すると1000万を超えるライブラリの利用者へ影響が及ぶものだったとしている。その中でctxとphpassは特に人気のライブラリで、それ以外に同様の改ざんを行っていないのかは言及を確認できていない。実行者が調査したライブラリはRust Package Registry、Python Package Index、Composerの3つで、NPMJSは今回調査を行っていないが同様の攻撃が可能と見解を示している。
- 調査方法はまずライブラリの所有者を特定し、紐づくGithubのアカウントが存在しない(404を返す)ものや所有者のメールドメインで失効したものが無いか調査をスクレイピングツール*5を使って行った。
- 実行者によれば、調査を通じて自身のサーバーで1000件の環境変数を受信したが大半は実行者自身への課金をさせるためのスパムだったとしている。(実行者はHerokuの無料版を使っていたので影響はないと言及している。)また次の対応が行われたことも明らかにした。*6
- 改ざんされたライブラリの削除
- 関係するGithubアカウントの削除
- 調査に使用していたHerokuのサーバー、アカウントの停止
- 個人的なWebサイトの停止*7
- 実行者は今回行った調査は悪意のある活動は含まれていなかったと重ねて説明したが、意図的にAWSシークレットアクセスキー等の情報を外部へ送信する処理を実装していた理由は明らかにしていない。
所有者のドメインやGithubリポジトリの状況を確認
2つのライブラリを改ざんした方法を次の通り説明している。
(1) ctxの改ざん
- 所有者のメールアドレスのドメインが無効であったことを確認し、当該ドメインを5ドル支払い取得。その後所有者と同じメールアカウントを作成しPyPIのパスワードリセットを実行して所有者のアカウントを掌握。
- 掌握した所有者アカウントを通じて改ざんしたライブラリ(ver0.2)をアップしたが、ダウンロード数が0.1.2と比較すると少なく、
requirements.txt
で一部のパッケージが利用していると推定し当該バージョン(ver0.1.2)自体を改ざんした。
(2) phpassの改ざん
- 所有者のGithubアカウントが存在しないことを確認し、同名のアカウントでphpassリポジトリを作成し不正なコードをそのライブラリへ仕込んだ。
- 廃止されたリポジトリをそのまま作成することはGithub上で許可されていないため、まずランダムなアカウント名を作成しそこで廃止されたリポジトリと同名のものを作成。その後にユーザー名を攻撃対象とする名前に変更することでこの制限を回避していた。この方法についてHackerOneを通じて実行者は報告したが、Duplicateとして閉じられてしまい公表時点でも問題は解決されていないとしている。
参照情報
- ctx Python Library Updated with "Extra" Features(SANS ISC Infosec Forums)
- Account Takeover and Malicious Replacement of ctx Project (Python Security)
- How I hacked CTX and PHPass Modules (sockpuppets)
更新履歴
- 2022年5月26日 PM 新規作成
*1:https://www.reddit.com/r/Python/comments/uumqmm/ctx_new_version_released_after_7_years_750k/?sort=old
*2:https://github.com/figlief/ctx
*3:PyPI package 'ctx' and PHP library 'phpass' compromised to steal environment variables,sonatype,2022年5月24日
*4:LinkedInに登録された情報によればトルコのセキュリティ研究者と自称
*5:RustのリポジトリについてはAWS EC2を使い数日で終了した、ただ全データをスクレイピングをした際にcreates.ioがクラッシュするとも説明している。
*6:いずれも実行者自身ではなく関係者による対応だったとみられる。
*7:http://web.archive.org/web/20220525011708/http://www.sockpuppets.ninja/