npm-fun という npm パッケージがヤバい
npm-fun という npm パッケージがヤバい。MacOS をお使いの方は、ぜひインストールしてみて欲しい (実行注意)。
$ npm install -g npm-fun
…
…
…
…
…新手のブラクラか。
謎の GIF 画像が開いたり、YouTube でリックロールが再生されたり、ミュートにしていたはずのスピーカー設定が爆音に変えられていたり、モニタの明るさが変更されてディスコよろしく点滅したり。
久々にブラクラっぽいモノを踏んだと思うので、実装を調べてみることにした。
実装を調べてみる
コチラが作者の GitHub リポジトリ。fun-req
なる依存パッケージを読み込んで、絵文字を表示したり、ボリュームを上げたり、画面の明るさを動的に変更したりしているようだ。
fun-req
も同じ作者が作ったモノ。何でパッケージ分けてるんだろ?
画面の明るさを変えているのは、brightness
および osx-brightness
パッケージを使用しているようだ。
- GitHub - kevva/brightness: Change screen brightness
- GitHub - gillstrom/osx-brightness: Get or set screen brightness in OS X
音量変更は loudness
というパッケージ。MacOS と Linux にしか対応していない模様。
リックロールが流れるのは kik-roll
パッケージ。ただ YouTube の URL を開いているだけみたい。ブラウザの設定によっては自動再生されたりしないのかも。
snap.js
というソースが気になったので読み込んでみる。
imagesnapjs
というパッケージを使って、接続されているウェブカメラで写真を撮って、imgur-uploader
を使って何やらアップしていることが分かった。コレマジでやべぇヤツじゃん。
ココまで掘り下げると、次のサイトの URL が見つかった。
どうやら npm-fun を実行してしまった人たちの様子をウェブカメラで撮影し、アップロード・展示しているようだ。危険すぎる。
…というワケで、ふざけたウィンドウが開いて画面がチカチカするイタズラの域を超えて、閲覧者のウェブカメラを無断撮影していたという、危険極まりない npm パッケージだと分かった。
実際のところ、ウェブカメラの起動には許可設定が必要で、リックロールのウィンドウなどの裏にカメラを許可するかというダイアログが隠れてしまっていたりする。なのでいきなりウェブカメラで撮影されることはないものの、コレが npm install
だけで起動してしまうところはなかなか驚くべきポイントだ。よくコレまで怪しげなライブラリを npm install
せずに済んでいたなぁ…。それとももう既に何か抜かれてる…?
JavaScript・Node.js の可能性が実証された、ともいえるが、少々イタズラの域を超えているようにも思える。お遊びとしてはなかなか面白いので、技術ネタとして参考にしておこう。