GRADUATION
ツールが見えない領域に、目が届くようになりました。
数量や価格をクライアントに委ねる業務ロジックの穴、そして「確認してから実行するまでの隙間」を突く競合状態(TOCTOU)を、自作のショップで再現し、直しました。どちらもスキャナには判定できない、そのアプリ固有の"当たり前"の壊れ方です。
おつかれさまでした。
持ち帰るもの
- クライアントは、事実を持ち込まない価格・在庫・権限といった「事実」は、常にサーバ側の記録を正とする。クライアントから届く値は、参照(どの商品か)であって事実そのものではありません。
- 確認と実行の間には、隙間がある「在庫があるか確認」してから「減らす」までの間に、別のリクエストが割り込める。この隙間(TOCTOU)を突くのが競合状態です。
- 直しは、確認と実行を1つにするチェックと更新を同時に(atomic に)行う。確認してから実行するのではなく、実行できたかどうかで確認する形に設計を変えます。
次にやるといいこと
- 次は「脆弱性診断の歩き方」。ここまでの自作やられ群を題材に、スコープ確認から報告書までの診断の全体像を歩きます。
- 業務ロジックの穴を見つける目は、sec-audit のソースコード診断でとくに活きます。ツールが拾わない箇所こそ、人が読む価値があります。