GRADUATION
攻めて見つけた穴を、自分の手で塞げるようになりました。
mini-ctf-webで攻めたarena-webを立て直し、2つの穴——本番公開前に消し忘れたデバッグ用エンドポイントと、クライアントの申告するroleパラメータを無条件で信じる権限昇格——を自分の手で修正しました。修正後、まったく同じexploitコマンドが失敗することを確認し、「直せた」を検証まで含めて完結させました。
おつかれさまでした。
持ち帰るもの
- 消し忘れは、コメントアウトではなく削除するTODOコメントを残したまま隠すのではなく、使われていないルートそのものをコードから削除しました。存在しないパスは、探しようがありません。
- 「誰であるか」は、クライアントに聞かないroleというクライアントの自己申告ではなく、サーバーが持つトークン対応表を参照するようにしました。sec-securecodingの「サーバーが真実を持つ」原則を、自分のコードに適用しました。
- 直した、で終わらせない。失敗することまで確認する修正後に同じexploitコマンドを再実行し、明示的に失敗する(404になる、flagが返らない)ことを確認して初めて「直った」と言えます。
次にやるといいこと
- このコースで、T7トラック(CTF)は一区切りです。攻める視点と直す視点、両方を体に入れました。
- sec-securecodingやsec-auditで学んだ「直す側」の視点を、他のmini-ctfコース(自分で作った脆弱なコード)にも当てはめてみると、さらに理解が深まります。