単にクエリパラメータをフィルタリングするだけでは不十分な場合、または普遍性の危険性について

尊敬される会社「ロシア鉄道」には素晴らしいサイトticket.rzd.ruがあります。 多少の粗さはありますが、このサイトはその主なタスクにうまく対応しています-オンラインでチケットを注文して支払いを行うことができます。



しばらくの間、そこでチケットを注文しましたが、ページのソースコードを見ずに研究機関が通り過ぎることはできませんでした。







注文手順の最後に、すべてが既に支払われている場合、注文ページが表示されます。これにより、とりわけ注文番号付きのバーコードを含むフォームを印刷できます。







この画像のアドレスは次のようになります。

https://ticket.rzd.ru/isvp/barcode?data=0000000000000&type=Code39&width=1&height=60&checksum=false

私が最初にしたことは、データフィールドの任意の番号を置き換えることでした。 結果は予測可能です-この番号のバーコードを取得しました。 まあ、素晴らしい無償のユニバーサルバーコードコーディングサービスがあります。 しかし、RJにとっては良いのでしょうか? さらに掘る...



次に、データフィールドをクリアしました。 結果は、バーコードジェネレーターライブラリ( barbecue )とアプリケーションサーバー( IBM WebSphere Application Server )の名前を持つスタックトレースです。 これはどの程度の情報を提供しましたか? もちろん、これはサーバーを破壊するのに十分ではありません。 しかし、あなたの「パスポート」を部外者に「路上の男」に見せることは最も合理的なことではありません。



他のパラメーターを見てみましょう。



原則として、攻撃ベクトルはすでに準備ができています。 バーコードの「描画」は、メモリ内で行われ、要求者に渡されます。 行の幅と高さ、デジタルコードの長さのパラメーターは、いかなる方法でもフィルター処理されません。したがって、些細な列挙により、サーバーのRAM全体を1ダースまたは2リクエストで消費するパラメーターが選択されます。 問題がわかるまで-数時間「ダウン」します。 また、OSの設定が正しくなく、スワップが開始されれば、サーバーのハードウェアが死ぬことはありません。



明らかな理由で、完成した「デスリンク」を提供していません。 そして、読者の慎重さを願っています。読者は、これが実際にそうであることを確認し始めず、その言葉を信じていました。



さて、ロシアの鉄道に報告する必要があるのは誰で、なぜそうするのかという質問をしましょう。 私たちにとって、これは良い例です:

  1. パラメータのフィルタリングは、PHPだけでなく、Javaの完全に「無害な」サービスでも必要です。
  2. 過度に普遍的なサービスを行うことは有害です。


PSサイトの開発者に事前に手紙が送られました。 「考慮されます」という丁寧な答えが来ましたが(ここでは敬意を表しています)、時間がなくなっており、まだ「考慮されていません」(ここでは失礼です)...



All Articles