はい、お願いします。
そうですね。
GitHubのブランチプロテクション突破方法っていうめちゃくちゃシンプルなタイトルで、
メルカリさんのテックブログのアドベントカレンダーなのかな。
アドベントカレンダーでした。
の記事です。
記事の内容はタイトルの通りで、
GitHubのブランチプロテクション突破方法を結構オモラ的に、ほぼほぼオモラ的に丁寧に解説してくれてるなっていうところで、
僕は正直、もともとは、なぜか高1年で詳しくなったんで、
そんなにこの記事でそんなルートがっていうのはなかったんですけど、
一方でそんな普段GitHubがっつり使用知らないとかアクションで触んないって人にとっては、
それなりに発見があるんじゃないかなっていうところがあるんで、
ぜひ読んでほしいなっていうところと、
また、これGitHubのドキュメントにないんですよね。
GitHubの…
まとめがないってこと?
そう、仕様としては全部ブランチプロテクションの仕様とかアクションの仕様とか、
そういう仕様あるし、
あとセキュリティのプラクティスみたいなドキュメントもいっちゃって、
こういう設定するといいですよみたいなものもあるんだけど、
こういうふうにしたら脆弱になりますっていうような切り口のドキュメントはないんで、
その意味では結構貴重な資料だなっていうのは思っていて、
なんていうか、頭の片隅に置いときたいなって。
思考の整理としてはすごく良さそうですよね。
そうっすね。
ていうかなんか、このGitHubアクションで使って何ができるんだっけみたいな話とか、
ブランチプロテクションにフォーカスしてるんだけど、この記事は。
そういうのこう、ある種のスレッドモデリングみたいなのやるときに多分めちゃくちゃ役に立つというか、
やりそうだよね、これね、多分。
そうだね。
何かことあるたびにこれ考えるような気がしていて、結局。
そうだね、そうだね。
それをやってくれてて、そのままあそこに置いといてくれるっていうのは、
これ参照すれば終わりだから。
まあ、そのGitHub側の仕様とか変わっていく部分はあるだろうから、
ずっとこれが使えるとは思わないけれども、
めちゃくちゃ助かる系のやつな気がしますね。
そうですね。
まあ1個注意点があるとしたら、結構1年経っちゃうとGitHubかなり仕様が進化しちゃうんで、
そこは意識した方がいいかなと思うんですね。
例えばまあこの記事では触れられてないけど、
ベータ版だからかな、そのプッシュルールセットみたいなのが半年前ぐらいに出たけど、
あの辺使うと結構もうちょっと大胆な防御機構を作れたりとか、
でもなんかその辺になってくると結構求められる仕様自体になってきちゃうんで、
で、一例でサービス名は全部濁してあるんですけど、
一つユースケースで取り上げられてたサービスとかと、
オース連携後に取得したアクセストークンを取得できるAPIエンドポイントとかがあったりして、
これはなんやねんっていうところが書いてあって、
それは確かにいらないね、おかしいね。
これのじゃあ何がいけないのっていう話で言うと、
例えばわかりやすいとかとXSSとかユーザーの環境が何か侵害されてしまったときに、
そのアクセストークンまでたどり着けちゃうっていうところで、
被害が不要に広がるよねっていうところがこの記事が課題として提起してるところで、
あとなるほどなと思ったのはアクセストークンが取れるって仕様だと、
攻撃者目線そのサービスのアカウントを突破してもらえれば、
そこから発信して、
その連携先のアクセス権を収集できるってことにもなるし、
それを悪用したときに悪用されたことに気づきづらいよねってことも書いてあって、
そのサービスに見えるからね。
もともと自分で連携してるサービスが振る舞っているようにしか見えないので。
新しく連携してるんじゃなくて、連携済みのトークンを使ってるから、
連携しましたよみたいな、ログインしましたよって通知もメールとかも飛んでこないから、
結構気づけないよねっていうのが問題です。
で、特にできることはないんですけど、
トリフォーがこの見つけたやつ何十歳とかには報告したが、
70%はごめんねって言って対応してくれて、
20%は無視して10%は使用ですっていうふうに回答してて、
僕ら的にはこれは脆弱性だろうって思うけどね、みたいな感じで。
でもこれさ、フロントエンドアプリケーションとバックエンドアプリケーションを合わせて、
オースクライアントと見成したときに、
両方でアクセストークンが共有されるって自然なことじゃないって思ったけど、
そう…
フロントエンドから直でGitHubにアクセスするケースがあるんだったら、
これ自体は自然じゃない?
アクセストークンがフロントエンド側に渡るっていうのは自然だよね。
そうじゃないんだったら意味がわからんっていうのはその通りだと思うんだけど。
そうしたいパターンってどういうパターンがあるのかなって気はするけどね。
わかんないよ、それはわからん。サービスの特性にもいるし。
サーバー中継して隠蔽した方が良くないって気もするし。
だからその辺は、実際問題は使用次第って話はあると思う。
だからこの10%が脆弱性じゃないって言い張ってる10%は、
実は使用上そうしなきゃ実現できない機能があるとかって話かもしれないし。
そこはわからんけど、これをもって脆弱性だよねって扱いがおかしいよねみたいな話になっちゃうのは
ちょっと違う気がするけどなと思わんでもないんだけど、どうなんだろうね。
なんか微妙なところではね、記事でも言ってたけど、
これが使用違反なのかと言われると結構、
オース次第本当に大枠しか決まってないってものもあるし、
別に何かの観点で間違ってるというわけではないけど、
リスクは大きいよねみたいな感じの捉え方をしてる。
アクセストークンを返してくれるエンドポイントがあるみたいなのは、
たぶんサバリのITPとかでクッキーとかが飛んじゃうからなんじゃないかなと思うんだけど、
ファーストパーティーなら飛ばないのか。
でも内側の一定期間とファーストパーティーであったとしても飛ばしてたはずだから。
セッションが消えちゃうってことを言ってる?
そう。
でもオース連携してたアクセストークンだければサービス動きますっていうサービスも
よくわからんくらいあるのかな。
でもそっか、どっちにしろクッキーをフロントエンドに置いといたとて、
でもやっぱ必要だよな。
ログインセッション作って、そのサービスとのログインセッションでだけだと、
仮に完結しなかったとしたら、
GitHubとかのアクセストークンをフロントエンド側に何かのタイミングで渡さないと、
特定の機能が使えませんっていうのが出てきてしまう可能性があるのか。
もし仮にフロントエンドからGitHubを直で叩かないといけないユースケースがあるんだとしても、
その場合は多分アクセストークンをそのサービスのバックエンドから返すんじゃない。
ついにフロントエンドにいつでも渡せるようにしとくんじゃなくて、
改めてワンタイムでアクセストークンを取り直すべきな気がするな。
せめて。
もう一回オーセ連携をしてってこと?
そうそうそうそう。
それはちょっと不便なんじゃない?まだ有効期限が。
どうしてもそれやらなきゃいけないんだったらそうするべきだなって思う。
バックエンドで持ってるアクセストークンをいつでも取れるっていう状態にしておくよりは、
絶対そっちのほうがマシなはずで。
そもそもフロントエンドに持たせなくていいよねっていうのはこの指摘の通りで、
持たせない仕様のほうがベタなのは間違いないんだけれども、
どうしてもそれが必要なユースケースがあるんだったら、
多分そういう時は、
2とGitHubの連携をし直してもらうっていうのがベタかな。
なるほどね、確かに。
なるほど、確かに確かに。
わからんけどね。
そんなユースケースあんのかわからんけど。
まあでもサービスによるんじゃない。
GitHubはないかもしれないけど、
GitHubじゃない他のなんていうか、
そのサービスだったらもしかしたらあるかもしれないし。
そうね。
まあちょっとこれは正直読んでみてくださいっていう感じなんですけど
で得られたその学びとしてこれを実践する上では事前準備が非常に重要だっていうのを感じたらしくて
でまあ例えばゲームを行う前にチームメンバーに対して脅威モデリングって何っていう話をちゃんと1時間ぐらいかけて説明を行ったりとか
あとは構成図とかも先に用意しておいたりとかで脅威モデリングを行うその時間自体はすごくスムーズに進められるようにできたよみたいな話とか
あとは今回カードゲームをするのに3時間ぐらい時間取ってたらしいんですけど時間内で全部終わらなかったらしいです
結構だよね
かなり重めなんだなっていうのがちょっと伺いしてるんですが
でまあ結構疲れちゃうんでなんか集中力も切れ気味になっちゃうよねみたいな話があって
なんか割と生の声だなと思いながら読んでました面白かった
まずカードゲームなんてあるんだっていうのがおって思ったのと
あとは少し別系統のものとしてプライバシーに関わる脅威モデリングフレームワークの一つをベースにした
リンダンなのかリンドンなのかわかんないんだけどリンダンGOっていうなんかカードゲームもあるらしいこれがちょっと僕は気になった
これはちょっと社内のプライバシーチームと一緒にやってみたいなと思ったりとかしましたよっていうのと
あとは開発者によった形で進めるのが望ましいっていうのは完全に同意でメルカリでも実際そうしてた
ドメインごとにきてドメインごとの開発チームとプロダクトセキュリティとプロダクトセキュリティではない僕でやってた
週に1時間みたいな感じで連続で分けてやってたんでその3時間やってちょっと疲れちゃうみたいなのはあんまりいなかった
ただ1時間複数回やらなきゃいけないっていうのは間違いなくあって
ただなんか洗い出しするのにそこそこメンバー集めない人を集めないといけなかったけど洗い出しするのに週に1時間ワーって集めてワーってやって何回かやったらそれで洗い出しが終わるよみたいなのは
個人的にはかなりコスパがいいなって思いながらやってたんですけど
そこそこ人数集めないといけないからコストはかかるんだけれども
週1時間で済むんだったら結構コスパは良かったのかなとか思っていて
ただカードゲームっていう形にしちゃうとシナリオが多分決まってるはずだから
ゲームとしてどうしても一巡するまでに時間がかかっちゃうっていうのがあるはずで
組織で働く人の話なんであれば
なんかこう今言ってくれたヤギハシの話もそうだしこの記事で触れられてるその
まあ何でしょうねその忙しさの中毒性というタイトルですけど
まあちょっとやれちゃうんだけどこういう風の側面もあるよねみたいなところに触れてる記事だと思うんだけど
なんかそういう部分はなんか理想論で言うとひっくるめてその組織の課題として捉えなきゃいけないことであり
なんかそういうところがピープルマネージメントなんじゃないかなって思っていて
なんでそのなんだろうなあんまなんか
その自分の一瞬とかなんかその人の一瞬って捉え方したくないなっていうのはなんかシンプルに思ったところ
それはそうねそれは間違いなくそう思うその人の問題ではないと思う
まああの
いやいやいや
ニヤニヤしすぎ
あのなんかわざわざいらん仕事ばっかり取ってきてなんか拾ってきてめっちゃ自分で勝手に忙しくなっているような人とかもいたりするから
まあ個人の一瞬じゃないのかなとかちょっと一瞬思っちゃったんだけどまあいいやと思った
まあその自分の立ってる立場によって見え方変わるかもねもしかしたらその
冗長の立場だとなんかそういう動きを抑制することも込みで
わかんないチームのパフォーマンスを最大化するときにその人の動きがそれと相反するんであればそれを抑えるべきだよねって話で
なんかそのいやあなたがフォーカスすべきってことはこれなのになんでこれ取ってきてんのっていうその対話を通して
辞めさせるのか必ずしも正解じゃないと思うから
なんかそこは切り込みに行かなきゃいけないし
同じチームメンバーの目線だとまあなんかどうにかせいやっていう風に見えるだろうし
まあもしくはもうわかんないその冗長というかマネージメントする人でもどうしようもないみたいなレベル感の人とかは
じゃあなんかわかんないな仕事の仕方というかその人能力の話になってくるだろうから
それはもう個人に回帰してくる部分は
だからなんか実際なんか01じゃないかもねちょっとグラデーションがあるというか
まあでも極論それを採用した組織の問題とも捉えられる
あーそうだねそうだね確かに確かにその捉え方もできるね
そうだねなんか結構また環境もあると思うんだよな環境というかそういうのがゼロには絶対ならないけど
その生まれづらいチームとか組織作りっていうのは大事だとは思うな
これに依存しているような組織はマジでちょっと寿命短いかなと思ったりする
続かないよね
続かない
たまに出てくるけど人は疲れるんですよっていうやつ
そうだね組織は続くかもしんないけどその人がねなんか長く優秀な人を与えてもらうみたいなものを求めるんであればあまり良くない