ECサイトの本番環境のセキュリティ診断で全ユーザーのパスワードが一時初期化される 10
ストーリー by hylom
SQLインジェクションはデータを盗むためだけのものではありません 部門より
SQLインジェクションはデータを盗むためだけのものではありません 部門より
とあるWebアプリケーションに対し脆弱性診断を行ったところ、そのWebアプリケーションの全ユーザーアカウントのパスワードが初期化されるというトラブルが発生した話が話題になっている。
診断対象のシステムは本番稼動環境だったとのことで、一歩間違えれば大問題に発展するところであったが、幸い診断の実行前にデータベースのバックアップが取られていたとのことで、大事には至らなかったという。
興味深いのは、このパスワードリセットがSQLインジェクションによって引き起こされたという点だ。具体的には、ユーザーがパスワードを忘れた際にパスワードをリセットする部分にバグがあり、そこで入力させられるメールアドレスに「'+'」という文字列を含んだ文字列を指定すると、すべてのユーザーのパスワードがリセットされるようになっていたという。
このシステムではSQLインジェクション対策が適切に行われておらず、このようなメールアドレスを指定すると、「'+'」という文字列が含まれたままでSQL文が発行されてしまっていたようだ。MySQLでは文字列に対し「+」演算子を使用すると、文字列を数値として評価してしまうという「暗黙の型変換」が発生する。その結果where句内が適切に機能せず、すべてのアカウントを対象に操作が実行されてしまったという話のようだ。
よかったね (スコア:1)
まさに脆弱性診断サマサマじゃないですか。
本番稼働前だし、なんの問題も無いと思います。
試験で不具合見つかったとして、それってトラブル発生っていうんですか?
Re: (スコア:0)
gmailのアドレスで、アカウント名の後ろに +XXX って付けてるのだが、
同様なミスが、他のサイトにあるかもと思うと怖いな・・・
Re: (スコア:0)
つーか、メールアドレスに+が使えないサービスの方が多い感じ
Re: (スコア:0)
どこだったか覚えてないけど、登録は出来るけど、いざそれでログインしようとするとダメ、ってところあったな・・・
Re: (スコア:0)
>本番稼働前
どこにそんなこと書いてあります?
> かなり前に作られていた
とか書いてあるし、
>テストサイトで の実施を勧めたが、「そんなもんねえから本番でやって」
>作業の再開と原因究明のために、速攻でテスト環 境が構築
稼動前だったら本番でやらない理由が(あまり)ないですよね
「+」は関係ない (スコア:0)
なんか「+」で異常動作するのが盲点だったように書かれているけど、
原因はシングルクォートのエスケープ漏れという基本中の基本だから。
Re: (スコア:0)
今時、そんなエスケープ処理を自前でやらねーだろ。
バインド変数使うだろ。
まぁ素人に毛が生えた程度の奴らはsqlに外部から入ってきた変数を直書きしている奴らをみるけど
(某大手質問サイトで今システムを作ってますとかいう奴らによく見る。こいつらサービスは絶対に使いたくないなと傍観していますが)
Re: (スコア:0)
今時強制的にPreparedStatement使わせないFWなんて存在するのかよ、
と思ってネタ元見てみたらかなり古いお手製ECってだけだったでござる。
こんなありふれたWEBアプリケーションの古典的失敗談をいまさら記事にすることなの?
Re: (スコア:0)
こんなありふれたWEBアプリケーションの古典的失敗談をいまさら記事にすることなの?
脆弱性の内容ではなくて、脆弱性診断を依頼する側にテストサイトでの実施の重要性を認識してもらうための定期ネタとしての価値があると思う。
Re: (スコア:0)
こんな古臭い脆弱性しか見つけられないようでは使い物にならないな、という認識か