How bugs are born — バグが生まれるメカニズム(一例)
一つの小さな見落としが思わぬ脆弱性に変わる。
だからこそ、深く検証します。
要件定義フェーズ
「Facebookログインを追加したい」
会員機能のあるサービスに、新しいSNSログインを足すことになった。よくある、ごく自然な要件。
設計・開発フェーズ
既存のGoogleログインを参考に、共通化
エンジニアは、動いているGoogleログインを手本に、SNSログインを共通化して実装しました。
リリース
テストもリリースも、問題なく完了
動作確認は通り、レビューも抜け、無事に世に出ました。——ここまでは、何も起きていません。
インシデント発生
アカウント乗っ取りにつながる脆弱性を発見
SNSを共通化する際に「本人確認処理」が抜け落ちていた。結果、Googleアカウント乗っ取りにつながる脆弱性が生まれていました。
原因
仕様書にない、5年前の「独立処理」
Googleログインの本人確認は、5年前に後から独立して追加されたものですが、仕様書にも明記がなく、誰の頭にもなかった——把握漏れだった。
全体の仕様を把握しないまま一部だけを変更すると、
高確率で矛盾が起き、バグが生まれる要因となります。