
影響範囲が広がるApache Struts2の脆弱性 58
ストーリー by hylom
注意喚起再び 部門より
注意喚起再び 部門より
3月9日、Webアプリケーションフレームワーク「Apache Struts」の脆弱性を狙った攻撃に対する注意喚起が出ていたが(過去記事)、この脆弱性を狙った攻撃や実際の被害が多数報告されている。
すでに特許情報プラットフォーム(過去記事)や都税支払いサイトおよび住宅金融支援機構(過去記事)、日本郵便(Security NEXT記事)などで問題の脆弱性を付いた攻撃が行われて情報流出が発生したことが報じられているが、これ以外にもニッポン放送の音声サービス「Radital」や(ニッポン放送の発表)や沖縄電力(発表PDF)などでも攻撃が確認されている。
当初は「Content-Type」ヘッダを利用して攻撃ができるという話だったが、これ以外の「Content-Disposition」や「Content-Length」といったヘッダを利用した攻撃も可能であることも判明している(Securty NEXT)。また、今回の脆弱性の対応としてパーサーを変更するというものが提案されていたが、この対応を行った場合でも攻撃が可能であることが確認されており、確実な対策としては脆弱性を修正したバージョンにアップデートするしかないようだ(INTERNET Watch)。
最初の対処方法がまずかったのかも? (スコア:5, すばらしい洞察)
最初に告知された対処方法の中に、バージョンアップしなくても対策できるようなことが書かれていたようで
それでこの脆弱性が残ってしまい(最初の対策方法では対処できてなかった)
その影響でここまで問題が大きくなった可能性がありますね。
ITpro Struts2脆弱性対策、実は無意味だった!JPCERTが指摘
http://itpro.nikkeibp.co.jp/atcl/news/17/032100876/?itp_side_ranking [nikkeibp.co.jp]
> Apache Struts2の開発を支援するApache Software Foundationが当初公開した対策の一つが無効だったとしている。
Re: (スコア:0)
Apacheのソフトウェアに、どうも良い印象がない。
Cordovaはなんか力押しにも程があるだろ、って感じがするし、POIはそもそもネーミングセンスからして腐ってるし。
Poor Obfuscation Implementationとか、お前らの実装も褒められたもんじゃないだろ……。
それに名前空間にまでHorribleとかわけのわからんユーモアを発揮してユーザーを惑わすんじゃない。
HSSFがExcelとか一目でわかる奴がどこにいるんだ。
あんまり数使ってないからあくまで個人の印象の域を脱しないけども、なんかどうもねぇ……。
中途半端に出来る奴が調子こいて作った感じがすごくする。
最初のスコアが低かったのも (スコア:1)
JVNで最初に出た時も10でなく7台だったと思うし?
それでクリティカルだと気が付かず後手に回ってしまったって所も少しはあるんじゃないかな?
今でも
https://jvn.jp/vu/JVNVU93610402/index.html [jvn.jp]
こっちだと7のままで
http://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-001621.html [jvndb.jvn.jp]
こっちはちょっと前にに格上げされた
Re: (スコア:0)
そもそもJVNでの公開日(3/9)にはすでに手遅れだったんだよなあ。
.Net Framework (スコア:0)
Microsoftの.Net Framework(ASP.Net)は脆弱性あっても
ここまで大規模に被害が報告されることが少ないよね?
ただ単に採用例が少ないのか、
サーバとはいえ半ば強制的にパッチをあてる仕組みが優秀なのか、
GUIぽちぽちクリックするだけでアップデートが完了するのが優秀なのか。
どれでしょう?
Re:.Net Framework (スコア:5, 参考になる)
脆弱性の一覧を調べてみました。
struts (1系、2系含む)
https://www.cvedetails.com/vulnerability-list/vendor_id-45/product_id-... [cvedetails.com]
2005/11/22より12年で57件、最高スコアが10.0 (最高値)
ASP.NET (1.1~)
https://www.cvedetails.com/vulnerability-list/vendor_id-26/product_id-... [cvedetails.com]
2003/09/22より15年で10件、最高スコアが7.8、任意コード実行なし
他はSpringが7件、CakePHPが5件。
上記は言語ランタイムの件数を含めていないし、それぞれのコードの規模にもよるんだろうけど、
strutsはかなり脆弱性が多い印象。
Re:.Net Framework (スコア:1)
Strutsはパラメータからリフレクション(とかファクトリ)で実行コードを呼び出す方法を多用してるけど、そこが特に深刻な脆弱性につながりやすい。
機能のカスタマイズ性を高めるためにやってるのはわかるけど、脇が甘すぎる。せめて、パラメータベースで実行されるコードをホワイトリストで管理する仕組みを全面的に取り入れるべきだった。
Re:.Net Framework (スコア:3, 興味深い)
.NET Framework自体にはそれなりに脆弱性を直すパッチは来てるよ。
ただ、ASP.NETでWebアプリ公開していて即死レベルの攻撃をされる脆弱性はなかなか無い。
Struts 2と同じレイヤのフレームワークで言うとASP.NET MVCがあるけど、
こちらも即死レベルの問題は全然無くて、今までWindows Updateで更新入ったのもたぶん片手で数えられるレベル。
まぁ単純にStruts 2作ってる連中がクソ&クソってだけじゃないかね。
あと.Netじゃなくて.NETな。
Re: (スコア:0)
まあJava自体、言語仕様的に目的のコードが長く冗長に成りやすい=メンテナンス性悪化とバグ隠れやすい面あるから。
というのを除いても、Strutsの修正コードはちょっとねw
そして過去の積み重ねもあるからもうムリw
.NETはそういう後々ヤバそうなモノを、言語仕様も見直して根元を断ちに行きますね。
Re: (スコア:0)
.Netに限らず、ここまで酷いフレームワークはあまり無いような気がします。
公共工事案件で大企業のどこかが採用してしまったのが、これだけ大規模化した理由かと思われます。
Re: (スコア:0)
攻撃手法が広まる前に情報を掴んでるかどうか、の違いかなあ。
もっと言えば、開発元への攻撃方法のタレこみが金になるかどうか。
Re: (スコア:0)
何の目的で.Netを引き合いにだしたのか知らんが、.Netは少なくともこんなに酷い代物じゃないからだろ
Windowで使用されまくってるものだから脆弱性が発覚した場合の影響はstrutsの比じゃないのだし
Re: (スコア:0)
Strutsとその作者が特別にクソでファイナルアンサー
Re:.Net Framework (スコア:5, 興味深い)
Java使いのセンスが悪いだけでしょう
Javaのセンスが悪い…のではなくStruts2の基盤の一つであるOGNLが全ての原因なんですよね。
OGNLとは(ざっくり言うと)文字列をJavaの式として評価できるライブラリです(構文とかは違うけどもやれることは同じ)
いわば他言語で言うところのevalにあたるもので、便利な一方で慎重に使わないとセキュリティリスクに直結する非常に危険な代物です。
そんなevalに相当する恐ろしいものがStruts2では設定ファイルを始め(今回問題になった)ログのフォーマットや動的なHTML(JSP)生成に使われたりと広範囲に利用されています。
このようにStruts2にはOGNLを基盤に使うという根本的にセキュリティリスクのある設計になっているため今後も同種の脆弱性は出続けるでしょう。
最善の策はStruts2の利用を止めることですね。
https://www.scutum.jp/information/waf_tech_blog/2014/04/waf-blog-036.html [scutum.jp]
たとえば、Struts 2を避ける (スコア:0)
PHPとかその他の動的言語を使うのって全ソースファイルを毎回evalしているも同然なわけでちょっと正気を疑いたくなるんですけど、どういうことなんでしょうね。
Re: (スコア:0)
Struts2はまさにその動的言語的なことをやりたくて頑張っちゃったらご覧の有様ということですね
Re: (スコア:0)
マスカッツの脆弱性を突きたいでござるの巻
Re: (スコア:0)
動的言語がセキュリティを意識していないとか、
インタプリタの時代で認識が止まってるのかな
Re: (スコア:0)
こないだのwordpressの脆弱性とかみていると、それも疑わしい
Re: (スコア:0)
Struts2はただの動的言語で作られたアプリでなく、外部入力パラメータとか色々な変数をマトモに検証しないでevalしまくってるセキュリティ的にタコい動的言語アプリと同レベルだからですよ。
Re: (スコア:0)
マネージャー側は、まさにPHPを使わせたくないからJavaをチョイスしているのに、
フレームワーク側でそれを破られるのは痛いわな。。
Re: (スコア:0, 荒らし)
つまり、Java使いのセンスが悪いってことですね
Re: (スコア:0)
そういうことにしてしまうお前のセンスはもっと悪いけどな
Re: (スコア:0, 荒らし)
要するにJava使いのセンスが無かったってことですな
Re: (スコア:0)
とどのつまり、Java使いのセンスが悪いって事やね
Re: (スコア:0)
OSフレームワークの話なら、.NET Frameworkに相当するところのJavaの脆弱性も持ち出さないといけませんよね。
フレームワークのVUPって (スコア:0)
一般的に瑕疵対応?有償対応?
当然瑕疵期間なんて終了済みだろうけど。
ああ保守対応か
Re: (スコア:0)
これは有償対応じゃねえかな、テストまわすなら
当然、保守契約に盛り込んである場合はその限りじゃないが
相当保守でお金もらってないと対応したくないなぁ
黒魔術の代償 (スコア:0)
reflectionやjavaassist使ったバイトコード操作で省力化するのはいいけど、いざこういう話になると
往々にして基底部分だから場当たり的な対処を重ねる形になっちゃうなぁ。
いずれrubyとかnodeとかのダックタイピングありきな処理系でもそういうフレームワークやDSLで起きるんじゃねえのかなぁ。
Re: (スコア:0)
リフレクションとか言わばプログラミング言語の理想を追い求めた過程の産物なんですけど、
Web攻撃者の事を考えると「隠しておくべき邪悪の呪文」になっちゃうんですねぇ。
はよ終息 (スコア:0)
もうStruts2はShutdownすればいいよ
「不具合多いので終わります。ありがとうございましたー」
でいいよ。たいしてやる気も無いのにちまちま対処療法してたって
利用者は「まだ使えるんだ、じゃあつかうかー」って同じこと繰り返すだけ
炎上覚悟でプロジェクト閉じて、いまだ目が覚めてないStruts2ユーザーに
乗り換えを促進させたほうが、役立っているという意味ではまだマシ
Re: (スコア:0)
対症療法ね。
……もう対処療法でもいい気もしてきた。
この間違いする人山の様にいるしなぁ。
Re: (スコア:0)
開発終わっちゃったから脆弱性ありバージョンでもそのまま使うしかない
って判断されちゃうほうに賭ける
Re: (スコア:0)
代わりに適切な、Javaフレームワークをチョイスしていただけると有り難く。
Re: (スコア:0)
jsfでええやん
Re: (スコア:0)
Spring BootかPlay
JSFはゴミ
Re: (スコア:0)
どもども。10年前にJSFゴミだなと思ってたけど、やっぱ今でもゴミなのか。。
Re: (スコア:0)
そもそもの仕組みからして、MSですら見限ったASP.NET WebFormsのちょっとマシなヤツ、ってレベルだからな
Re: (スコア:0)
どうせ書き直すんだからC#(+ASP.NET MVCとか)でいいんじゃね?
JavaからC#に移行できない程度の応用力ならプログラマー切って据え替えるところからで。
Re: (スコア:0)
C#は別にいいんだけど、JavaならJavaでいいじゃん
サーバまで買い換えさせるんか?無理に決まってる
新規にサーバから立て直すならわかるが、Struts2からの置き換えでC#という選択肢はないよ
Re: (スコア:0)
なんで買い替えが必要なの?
Re: (スコア:0)
Linuxで運用するのはちょっとなぁ。
Re: (スコア:0)
今時のLinux動かしてるのなんてIAサーバーだからWindowsいれればハードの交換なんざ必要ないと思うんだが。
逆はあるにせよ、IAサーバーに使うようなパーツ・周辺機器でLinux用にドライバ供給しててWindows用ドライバはありません、なんて話は聞いたことがないし。
既存DBとのすりあわせとかで考えるにせよ、別にWindows Server(+IIS・ASP.NET)とLinux(OracleやPostgre等)のシステム構築例は世の中にいくらでもあるから、システムのみ移行すれば事足りる。
システム移行の手間で考えても、Struts消して別フレームワークで構築し直したアプリをデプロイするならそこそこ
Re: (スコア:0)
大手ITベンダに発注すると、Java案件では大真面目にSolarisだったりするんです。お役所案件などでは特に。
Re: (スコア:0)
昔、あるところでASP.NETとJava+Struts系の両方で同じWebコンテンツを作った
・環境構築の手間
・コードの量、効率
・開発時のデバッグ、調査のしやすさ
が断然asp.netだったなあ。
依頼してきた人が「ASP.NET良いなあ」とw
C#(3.5)に惚れ込んでた。長く冗長なのが嫌いな人でしたしね。
ただ問題になったのがLinuxで動かすことを考えた時。
XSPの次がApache+mod_monoかな?
Apacheは設定地獄だしねえ。。
Re: (スコア:0)
そこは普通にnginxとmicrosoft/aspnetcoreの組み合わせでDockerコンテナを動かせばいいのでは
MSも.NET CoreのVisual StudioプロジェクトテンプレートにDockerサポートをつけてるぐらいだし、
他のプラットフォームと同じ感じで動かすのが無難だと思うけどねぇ
Re: (スコア:0)
struts2-archetype-angularjsかなりイイんすけどね、コーディング量少なくて、struts2だけど…
rubyのsinatraやnodeのexpressみたいなテンプレートエンジンと縁切りしたJavaのWebフレームワーク欲しいな
sparkってどうなのかなぁ
Re: (スコア:0)
自分の周囲だとSpring Web MVCが主流だが。
今からStrutsで始めるプロジェクトを見たことがない。
Re: (スコア:0)
結局のところ、みんな自分なりのタコツボを持っていましたという話のような。
他のツリーでも意見が割れる一方、それでもStrutsという人もちらほら。
Re: (スコア:0)
N系の案件なんかだと「Struts必須」となってるんだよね…。Struts終わったらそういうところはどうするんだろう。