“import request” in Python

ほぼこもセキュリティニュース By Terilogy Worx

Pythonのコードを書いたことがありますか?
Pythonは非常に強力なコード資産を持つコンピュータ言語です。
大抵の実施したいと思う機能は、どこかの誰かがすでに作成しています。
そしてその作成された機能は公開されています。
私たちがその機能を使いたいと思った時は、その名前を知り、単にpip installしてimportするだけで使えます。

他にも開発を便利にする機能はいくつもあります。
その一つは便利な機能を持つエディターです。
その場面その場面で必要となる内容を、入力支援機能で候補として示してくれます。
このため、コーディングする人は自分で考えて入力する量をかなり抑えることができます。
こういった機能は特別なものではなく、多くの人気のエディターに実装されています。
この機能があるととても高速に誤りなく開発を進めることができます。

これらの2つの事柄は通常良いことです。

ですが、もしかしたらこの2つが組み合わさることで悲劇が起こったかもしれません。

まず1つ目は、PythonのPyPIに公開されているものに打ち間違えを狙ったと思われる基礎的なコードが公開されていました。
打ち間違えていないものは「requests」です。
これはPythonのRequestsモジュールです。
これを使うことで開発者は非常に簡単に自分の作成するコードの中でHTTP機能を実現することができます。
利用開始に際してはあらかじめ「pip install requests」しておけば、あとは単に「import requests」と宣言するだけでOKです。
そうするとそれ以降は「requests.get」や「requests.post」などのrequestsのなかの機能を簡単に利用することができます。
実現できる機能は名前の示している通りです。

ここでエディターの入力支援機能が開発を加速します。
エディター上で「req」とか入力すると入力候補として「requests」とか表示されますし、そこまで確定するとその続きの「.get」とかを候補として示してくれます。
開発者はそういった候補から自分の求めるものを選択していくだけでどんどんコーディングが進んでいきます。

ここまでの話は、誤りがない開始の場合のことでした。
どういうことでしょう。
たとえば私が最初に「pip install requests」ではなく「pip install request」と入力してしまっていたら何が起こるでしょう。
最後の「s」が抜けています。
普通はそのような名前のものは公開されていませんので「Could not find」という感じでエラーになって終わります。
間違った名前をを正しい名前に変更してもう一度コマンドを入力すれば正しい開発が開始できます。
でもどこかの誰かが「request」を公開していたらどうでしょう。
開発者としては間違った名前でコマンドを実行しているのですが、その間違った名前のものは公開されていますので、インストールができてしまうのです。
そしてインストールできたらどうなるでしょう。
エディターの入力支援機能のおかげもあって、間違ったことに気が付くチャンスも少ないままどんどん開発を進めることができてしまいます。
古き良き時代で高機能なエディターがなかった時代なら、いくら何でも間違った名前を手入力で何度も何度も間違って入力することはなかったかもしれません。
そのうち間違いに気が付いて修正して事なきを得るかもしれません。

先日、複数のPyPIで公開されているモジュールにこの問題があることが確認されました。
「keep」と「pyanxdns」と「api-res-py」に「request」との依存関係が記述され、結果としてバックドアを提供する状態になってしまっていました。
これら3つのモジュールの作者さんはそれぞれ異なります。
どうやら3人が別々に同じ打ち間違えをしてしまったようなのです。
そして、そのままその書いたものを公開することになってしまったということになります。

開発環境は補完機能をはじめとして恐ろしく便利になってきています。
便利な道具は便利な道具として使っていくのですが、最後のところは自分で気をつけないといけないなと思いました。

参考記事(外部リンク):PyPI package ‘keep’ mistakenly included a password stealer
www.bleepingcomputer.com/news/security/pypi-package-keep-mistakenly-included-a-password-stealer/

一緒によく読まれている記事

最新の脅威情報
をお届け

BLOGブログ

情報セキュリティに対する啓蒙のため、
3つのメディアを運用し、
情報発信を行っています。

わたしたちはサイバー領域や
認知領域の未知なる脅威に、
テクノロジーとインテリジェンスで対抗します。

私たちが選ばれる理由

CONTACT リスクマネジメントサービスの
ご相談窓口

コンステラ セキュリティ ジャパンは
最先端のサービスを
お客様のニーズに
カスタマイズして提供し、
効果が出るまで寄り添います。