GRADUATION
サーバの「内側」で起きる壊れ方が、見えるようになりました。
利用者の入力を直接読むのではなく、サーバ自身に外部URLを取りに行かせたり、データを復元させたりする処理に潜む穴——SSRFと安全でないデシリアライズ——を、自作の構成で攻撃・修正・再検証しました。
おつかれさまでした。
持ち帰るもの
- サーバは「信頼された内側の住人」外から直接届かない内部サービスにも、サーバ自身なら届きます。SSRFは、その特権的な立ち位置を利用者の入力で乗っ取る攻撃です。
- URLの検証は許可リストで危険なホスト・IPを弾く(ブラックリスト)のではなく、許可した宛先だけを通す。プライベートIP帯・ループバック・メタデータエンドポイントは既定で拒否します。
- 復元は、信じない外部由来のデータを「元の形に戻す」処理(デシリアライズ)は、型やスキーマで厳格に検証してから使う。evalや汎用の復元関数に渡さない。
次にやるといいこと
- 次は「ビジネスロジックと競合状態」。入力の中身ではなく、処理の順序や前提が壊れる、また違う種類の穴を扱います。
- SSRFとデシリアライズの直しは、sec-audit のコード診断で「危険な関数呼び出し」を探すときの実地の目になります。