web-dev-qa-db-ja.com

JavaScriptの縮小によるセキュリティへの影響は何ですか?

近年、WebアプリケーションでのJavaScriptの縮小化の使用は急速に広まり、今日ではデファクトスタンダードと見なすことができます。そのようなツールを使用すると、初期のソースコードには存在しない新しい脆弱性が導入される可能性があるのでしょうか。

5
westbeam87

単純な置換が新しい脆弱性をもたらすことはほとんどありません。

ミニファイが従うルールはシンプルで実装が簡単で、言語の文法はかなり簡単に解析できます。

したがって、ミニファイ自体は、JavaScript(基本的にはリモートで任意のコードを実行するための方法)の使用に対して、一般的に重大な脅威をもたらすことはありません。

@Armeniusからのコメントの後で、私は 特定のエッジケース があることを指摘したいと思います。この場合、ミニファイアは、JavaScriptの(どういうわけか複雑な)タイピングシステムを仮定します-よく-バグ。

これはまだ修正されていますが、もちろん、作者が意図したものとは異なる機能を(ab)使用することを縮小するために物事を行う不十分に設計された縮小版が存在しないという証拠はありません。

また、これは、たとえば事例証拠として、使用するミニファイアに依存することにも注意してください。gccからclangへの切り替えにより、ifステートメントで整数がオーバーフローしたかどうかをチェックすることで「修正」されたバッファーオーバーフローが発生しました。標準では、オーバーフローした整数の動作は定義されておらず、minintでそれらを開始するためにgccが使用されると記載されています。 Clangは巧妙でした:"整数が流れない場合、負になることはありません。負の場合は、オーバーフローが発生しているはずです。どの結果が定義されていないので、ifステートメント全体を最適化します"

そのため、はい、(基本的にすべてのソフトウェアであるため)ミニファイアが新しいバグをもたらす可能性はわずかです。ただし、構文はそれほど複雑ではないため、これらはまれで簡単に修正できると確信しています。

それでも、縮小に関しては見過ごされることが多い含意があります。スクリプトが縮小されると、再膨張しない限り、スクリプトは人間にとって本質的に理解できなくなります。したがって、それらがよく知られた信頼できるCDNから含まれていない場合、たとえば、他の点では細かいjQuery実装に隠された悪意のあるスクリプトの断片が含まれる可能性があります。

そして、そのような悪意のあるコードを導入することは、縮小者によって非常にうまく行うことができます。しかし一方で、そのようなツールは通常オープンソースであり、最小化されたすべてのスクリプトに隠された暗号マイナーがコミュニティによってかなり迅速に発見されます。

それとは別に、生成されてユーザーに展開される前に、悪意のある明確なコードを縮小スクリプトにドロップすることは、隠れ場所として最適です。継続的な縮小により、Webサイトの手動によるセキュリティレビューがさらに複雑になります。

4
Tobi Nary