« ^ »

PyPIの乗っ取りと環境変数の取り扱いについて考えた雑多なこと

所要時間: 約 2分

怖いTweetが流れてきた。

https://twitter.com/shimizukawa/status/1529259666798419969

どうやらPyPIのパッケージが乗っとられ実行環境の環境変数を外部サイトに送信されるということが起きていたようだ。 問題となったパッケージはctxというもの。すでにPyPIからは削除されている。

近年は環境変数でクレデンシャル情報などをアプリケーションに受け渡すことも多くなった。 サーバーレス技術やコンテナ技術が普及したことがそれを後押ししているように思える。 Web系の技術は特にだが、使用するサードパーティのライブラリも多くなりがちで、その全てに目を光らせ続けることはできない。

環境変数に重要な値を設定するということ自体、避けるべきことなのかもしれない。 環境変数はアプリケーション自身は簡単に取得できるが、外部の者からも環境変数に重要なデータが入っていると推測しやすい。 起動中のプログラムのメモリ上にだけ置いておくほうがよいのかもしれない。

一方でこの脆弱性の挙動は環境変数を外部に送信するという悪意だったが、 シェルコードだったらどうだろうか。 またメモリ上にクレデンシャル情報を置いておくのであれば、 メモリをダンプしてそれを全て送信するという挙動であったならどうか。

多くのライブラリを使用するようなアプリケーションで、重要な情報を持ってはいけないのかもしれない。 多くのライブラリを使用するようなアプリケーションでは基本的にクレデンシャルは持たず、 アプリケーション外へのアクセスについては、 外部の機構(例えばIAMでクレデンシャルを使用しない)で可能であればそれで制御し、 それが難しければ薄い認証プロキシを実装し、そこにクレデンシャルを持たせて中継するといった方法が良いのかもしれない。 その薄い認証プロキシはプログラミング言語が提供している機能しか使用せず、サードパーティのコードは利用しない。

このようにすれば幾分リスクは減らせるのではないかと考えた。

あと私自身PyPIにパッケージをいくつも公開してしまっているので、 ちゃんと保守しようと思った。