suguru.dev

バンクーバーで働くエンジニアの備忘録

NPMのパッケージの所有権を乗っ取られそうになった話

概要

ある日突然「あなたの所有するパッケージの所有権を取得するためにDispute Resolutionに従って申請を始めている」というメールをNPM経由で頂きました。 ビビりました。それをお断りするまでの軌跡です。

TL;DR

  • メールきたら無視しちゃダメ
  • はっきりと断ろう
  • チケットのクローズを見届けよう

Dispute Resolutionとは

ザックリ説明すると、NPMはパッケージ名がユニークである必要があります。原則的に、他者の所有するパッケージ名を取得することは不可能ですが、特定の条件下のみこのプロセスを通じて取得申請することができます。

  1. Get the author email with npm owner ls
  2. Open a support ticket at https://npmjs.com/support
  3. Reply to the support ticket email, adding the author on the To line so that both npm support and the author are now on the thread.
  4. Politely ask if the author will transfer the package.
  5. After 4 weeks, if there's no resolution, we'll address it.

最初のメール

彼は私の所有するrecomposer というパッケージの所有権を、長いこと更新がないこと・機能を追加したいことを理由に取得しようと申請してました。

recompose とはReact Hooksが出る以前によく使われていたHOCベースのReact用のライブラリです。recomposerとは、それをTypeScriptでラップし、メソッドチェインで使用できるようにしたライブラリです。

良くなかったのがこのときの返信でした。

私はめんどくさいことを避けるべく 「recomposerrecomposeに依存しているため、 先にrecomposeに聞いてくれ。今は譲渡するつもりはない」と返信してしまいました。recomposeはどうせ相手にしないだろうと目論んで。

第2のメール

彼は実はrecomposeの所有権の申請も同時にしており「4週間以内に有益な更新をするように」と言われました。 この4週間とは、Dispute Resolutionの最後の項にある「4週間後、決議が得られない場合、所有権を譲渡する」という内容を踏まえてだと思われました。

We are not currently accepting dispute requests to "adopt an abandoned package" as we re-evaluate and update the overall dispute process.

一応、上のポリシーにはabandoned packageは対象外と書いてあるのですが、そもそも"abandoned"という定義は曖昧で明確ではなかったのと、 私はNPMパッケージの扱いにかなりセンシティブなので、一般的にどのように対応するべきかどうかをNPMに問い合わせすることにしました。

NPMパッケージが他者に渡る危険性

recomposeは今でも127万/weekダウンロードがあるパッケージです。そのパッケージが他者に渡るとコードが改変され悪質なコードを追加されてしまう危険性があります。なのでNPMのアカウント・パッケージはGithub以上に厳重に管理する必要があります。

過去にこんな事件がありました。ご存知でない方はこちらをどうぞ。

2018/11/27に判明したnpmパッケージ乗っ取りについて - Qiita

NPMとのメール

今回のようなメールを受け取った場合、どのように対応するべきかについてNPMに問い合わせしました。 これに対する返答は「メールに対して返信すること」と「はっきりと断ること」でした、申し訳ない。

最後のメール

最後にはっきりと丁寧にお断りして、彼に感謝の意を表明して、NPMの方にチケットをクローズしていただきました。

まとめ

NPMパッケージは誰が使ってるかわかりません、責任を持って守りましょう。

世の中には色んな人がいますが、きっと彼はOSSを改善しようと考えていたのだと思います。ただ、recomposeというのを選んでしまっただけで。。。