パスワードを忘れた? アカウント作成
13145831 story
バグ

WordPress 4.7.0および4.7.1 に認証なしでコンテンツをアップロードできる深刻な脆弱性 33

ストーリー by hylom
すぐに更新しなくても大丈夫かなと思っていたらそんなことはなかった 部門より
あるAnonymous Coward 曰く、

WordPress 4.7.0および4.7.1に、認証無しで誰もがサイト上にコンテンツをアップロードできるという脆弱性が存在することが明らかになった。この脆弱性は1月26日にリリースされたWordPress 4.7.2で修正されたが、リリース時にはこの脆弱性については非公開とされていた(プレスリリースIPAITmediaImpress Watch)。

問題の脆弱性は、REST API経由でコンテンツを投稿する際に本来必要であるはずの認証をバイパスできるというもの。このREST API機能は以前からプラグインとして用意されていたが、バージョン4.7から本体に同梱、デフォルトで有効化されるようになったものだという。脆弱性の詳細についてはセキュリティエンジニアの徳丸氏のブログが詳しいが、「id=1A」のようなパラメータを指定した場合に、存在しないIDとみなされるはずがPHPの型変換により特定の処理が動いてしまうといことらしい。

WordPress.orgは通常すぐに脆弱性情報を公開するが、今回は危険性を鑑みて、自動アップデートやセキュリティ企業の対策の猶予期間を設けた上での発表という異例の対応となった。既に国内のサイトでもこの脆弱性を利用したとみられる改竄が確認されている事から、該当バージョンの利用者は至急アップデートを実施されたし。

  • by Anonymous Coward on 2017年02月07日 12時09分 (#3157080)

    >API機能は以前からプラグインとして用意されていたが、バージョン4.7から本体に同梱、デフォルトで有効化される

    ここに返信
    • by Anonymous Coward on 2017年02月07日 12時18分 (#3157091)

      プラグインの脆弱性だと「いつもの事か」で話題にならずにすんだのに、余計な事をするから……

      • by Anonymous Coward

        これほど広範に利用されてるんだから、もう機能拡張なしでただ脆弱性を消していくだけの安定版が欲しいところだ。
        プラグインがあるんだし、新機能なんかもそちらで導入させれば。
        実際、ほとんどのwordpress利用者は新機能なんか望んでないと思う。ブログなら書くだけだし、普通のサイトなら一度出来上がったらおしまい。

        自分は自動で4.7.2にアップデートされたけど、念のためREST APIを無効にするプラグインを入れた。なんか本末転倒。

        • by Anonymous Coward

          コメントとか検索とかの動的な機能がいらないなら、
          Simply StaticとかStaticPressを使って静的化するのがいい
          Wordpress本体は外部からアクセスできない場所に置いとけば、
          攻撃を受けることはまずないので、アップデートする必要もない

          • by Anonymous Coward

            Wordpress本体は外部からアクセスできない場所に置いとけば、

            それができるくらいリテラシ高い顧客はMT買う。

        • by Anonymous Coward

          これほど広範に利用されてるんだから、もう機能拡張なしでただ脆弱性を消していくだけの安定版が欲しいところだ。

          長期間サポートしてくれるエディションを出せばいいのだがそれだと高額のサポート料が必要になるでしょうな

        • by Anonymous Coward

          余計なAPIだけでなく、許可した種類以外のあらゆるURLを無効にするプラグインが欲しいな
          スパムのBOTとかが負荷を掛けてくることもあるから、HTTPD側の機能でPHPを実行することなく404にして欲しい

  • by Anonymous Coward on 2017年02月07日 18時10分 (#3157317)

    この件について、なぜか全く無関係のGoogleから更新を促すメールが飛んできました。
    これについては有り難かったのですが、Googleに監視されてるみたいで(実際そうなのでしょうが)少々気味が悪かったです。

    …なんか登録したっけなぁ?

    ここに返信
    • by Anonymous Coward

      Google Search Consoleから来た [hukugyolife.com]って話があったので、それでしょうか?過去に登録してると来るんですかね。
      …全然無関係のサイトの管理者にまで送ってたら、ちょっと怖い。

      # Googleさんこんな案内までしてるんだなぁ。

      • by Anonymous Coward

        これですねー。そういえば遥か昔(10年くらい前?)に登録した覚えが…。ただの検索エンジン登録っていう認識だったので、完全に失念してました。
        こんなメール初めて見ましたが、今回はわざわざユーザの使用しているサービスプログラムを認識して、通知送ってくるぐらい緊急ってことなんですかね。

  • by Anonymous Coward on 2017年02月07日 11時46分 (#3157061)
    >$id (引用者注:中身は文字列'1A') を整数にキャストしているため、get_post(1)が呼ばれ、ID=1 のコンテンツが変更されることになります
    いやいやいや
    どういう頭の構造してたら(int)"1A"が1になる言語設計しようと思うんだよ…
    ここに返信
    • by Anonymous Coward on 2017年02月07日 13時00分 (#3157130)

      どういう頭の構造してたら(int)"1A"が1になる言語設計しようと思うんだよ…

      $ ruby -v
      ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
      $ ruby -e 'p "1A".to_i'
      1

      $ perl -v
       
      This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linux
      (with 30 registered patches, see perl -V for more detail)
       
      Copyright 1987-2016, Larry Wall
       
      Perl may be copied only under the terms of either the Artistic License or the
      GNU General Public License, which may be found in the Perl 5 source kit.
       
      Complete documentation for Perl, including FAQ lists, should be found on
      this system using "man perl" or "perldoc perl".  If you have access to the
      Internet, point your browser at http://www.perl.org/, the Perl Home Page.
       
      $ perl -e 'print int("1A");'
      1

      $ python -V
      Python 3.5.2
      $ python -c 'print(int("1A"))'
      Traceback (most recent call last):
        File "<string>", line 1, in <module>
      ValueError: invalid literal for int() with base 10: '1A'
       
      $ python -c 'print( int("1A",16) )'
      26

      $ lua -v
      Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
      $ lua -e 'print( tonumber("1A") )'
      nil
      $ lua -e 'print( tonumber("1A",16) )'
      26

      御三家で言うと、Pythonだけがまともな頭の構造してるということですね。わかります。

    • by Anonymous Coward

      atoi("1A")はいくらになるの!っと

    • by Anonymous Coward

      #!ruby

      p "1A".to_i

      • by Anonymous Coward

        #!perl

        print int("1A");

      • by Anonymous Coward

        #!ruby
        p Integer("1A") #~> ArgumentError: invalid value for Integer(): "1A"
        p Integer("1A", 16) #=> 26

    • by Anonymous Coward

      > どういう頭の構造してたら
      先頭から見ていって、数字と解釈できなくなるところまで変換。
      というところじゃなかろうか。

      • by Anonymous Coward

        ヘッダが"1"でトレーラが"A"という構造か

    • by Anonymous Coward

      $ cat src.cc
      #include <iostream>
      #include <string>
      #include <cstdlib>
      #include "boost/lexical_cast.hpp"
       
      int main() {
          std::string str = "1A";
          std::cout << "atoi() -> " << std::atoi( str.c_str() ) << std::endl;
          std::cout << boost::lexical_cast<int>(str) << std::endl;
      }
       
      $ g++ src.cc ; ./a.out
      atoi() -> 1
      terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exceptio

      • by Anonymous Coward

        歴史的な経緯があるんですかね。

        ちなみにPASCAL(といってもボーランド系からの流れ)では、例外を投げるStrToIntと、戻り値不定だがエラーがあったことが分かるValがあるようです。

        #この15年くらい触ってなかったのでググった。

    • by Anonymous Coward

      PHPのキャストはどうなってるんだって読んで行ったら、C言語のstrtod関数も結構大胆なんだね。doubleに変換できない文字があったことはわかるけど、変換自体が失敗するわけじゃなくて、無視するだけなんだ…未知の単位がくっついていて、いちいち引き剥がさなくてもいいようにっていう親切心なのかな??
      http://www9.plala.or.jp/sgwr-t/lib/strtod.html [plala.or.jp]

      • by Anonymous Coward

        そのリンク貼ってその感想に至る理由がわからない

    • by Anonymous Coward
      perl

      print "1A" + "1A"; #2
      print "1A" * 1; #1

      my $str = "1A";
      print ++$str; #2

      どこからどうみても1Aは1だよね。
    • by Anonymous Coward

      それも酷いが、urlの引数のidの書式のチェックをする気がない?
      断じてis_numericは使わない?
      モコウ…これでチェックメイト?

      • by Anonymous Coward

        あれ?って思ったけどPHP7からはis_numericで16進はエラーになったのか
        でもほとんどのところはまだ7じゃないんじゃない?
        1Aは数値としては妥当だから7以前だと通しちゃうんじゃないかな

        • by Anonymous Coward

          ああ、0xついてないとfalseになるね、失礼しました

  • by Anonymous Coward on 2017年02月07日 13時44分 (#3157152)

    公式が発表したのが2月1日、で日本語圏で騒がれだしたのが一昨日あたりからなイメージなので、ガチでクラッキングしてる奴らはもうとっくに一仕事終えてそう。
    情報格差は常日頃からあるとはいえ、セキュリティ系はやばいな。

    ここに返信
    • by Anonymous Coward

      某大学とか某五輪相とかも、この穴を突くれたんですかね?

    • by Anonymous Coward

      クラッカーどころか
      観測者が一仕事終えてますね
      http://izumino.jp/Security/def_jp.html [izumino.jp]

      • by Anonymous Coward

        げげ、個人サイトどころか企業サイトもガンガンやられてるとわ。こいつは大事になるわけです(汗

        • by Anonymous Coward

          観測サイトから、いくつかの企業サイトと、その公式ツイッター等をみてみたんだけど
          改ざんされたってのを公表しているサイトが
          (2~3個チェックした限りでは)見当たらなかったってのが怖い
          メルクストーリアの公式では、サーバ障害ってことにして改ざんっての隠してるし
          アニメージュは何もなし

  • 何かあると思ったら……うちは改ざんされていないと思います。

    ここに返信
  • by Anonymous Coward on 2017年02月07日 17時02分 (#3157289)

    linux系で。痕跡を消されるケースは除く。

    ここに返信
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...