私が歌川です

@utgwkk が書いている

GitHub Actionsを使ったDDoSに巻き込まれた

事例集です。

きのう、GitHubの通知を見たら、個人のリポジトリに My First PR というタイトルのPRが来ているのに気づいた。PR出すところを間違えたのかな、と思って見てみたがどうも様子がおかしい。

  • prog という名前のバイナリファイルを置いている
  • .github/workflows/ci.yml*1の中身をガッと書き換えている
    • on: [pull_request] でworkflowを起動している
    • 20並列でjobが走るようにmatrixを設定している
      • fail-fast: false なので、どれか1つのmatrixが失敗しても他のジョブは続行される
    • base64 encodeした文字列をdecodeしてevalしている
      • ドメインの名前解決を行ったあと ./prog を実行するコマンドにdecodeされた
  • PRをめちゃくちゃな回数closeしてreopenしている
  • PRを出したユーザーではなく、リポジトリのオーナーがcommitしたかのようにcommit logを偽装している

走ってるworkflowリストを見にいったらめっちゃenqueueされている!! ひとまず当該PRを出してきたユーザーをブロックして、enqueueされたworkflowを全部キャンセルした。

当該ユーザーのリポジトリ一覧を見ると、めちゃくちゃforkして同様のPRを出しまくっている*2。これはいかんなーと思ってabuse reportを書いて送信した。

他の人は認識してないのか、とちょっとTwitterを検索してみると、GitHub ActionsがDDoSに使われているという @github へのメンションがあった。

これに対してGitHubの中の人が反応していた。

どうやら状況を認識されたようで、中の人の反応から数十分ぐらい待ったら当該ユーザーのアカウントが消えた。

リプライツリーには、このリポジトリのスクリプトを使って攻撃を仕掛けているという報告もあった。片っ端からpublicなリポジトリを見つけてはforkしてPRを作りまくるというのをやっていたようだ。


GitHub Actionsについてちょっと考えてみると、任意コードをいくらでも並列に実行できる環境があちこちに転がっているということになって、攻撃者にとっては魅力的ではありそう。そういう使い方をしないでほしい。

しかし、生きてるといろいろありますね。

*1:テストを走らせるworkflow YAML

*2:最後に見たときは250個ぐらいforkしてた