東京の図書館で技術書を借りよう
こんにちは。東京都品川区在住の徳丸です。東京で消耗しながら生活しています。都会での生活には、家賃が高いとか、通勤が地獄のようだ、などのデメリット(消耗)がありますが、一方メリットもたくさんあります。書籍が手に入りやすいこともその一つです。若い頃地方の工場(鹿児島県霧島市)でエンジニアとして生活していて痛感したことの一つに、田舎では技術書との出会いが不自由だということがありました。なので東京出張の旅に...
View ArticleOWASPのSQLインジェクション対策方針を読んで「おまえは俺か」と思った
つい最近まで、グローバル・スタンダードのセキュリティ施策ではバリデーションが極めて重視されている、いささか過剰ではないかと思っていたのですが、OWASPの文書を読みなおしたところ、これは僕の思い過ごしだったかと思い始めました。あくまでOWASPに限った話ではありますが…OWASP Top 10...
View Article決済代行を使っていてもクレジットカード情報が漏洩するフォーム改ざんに注意
先日以下の記事が公開されました。決済代行会社を使っていたのにカード情報が漏洩したというものです。同社は、薬局への医薬品の卸売りのほか、運営するショッピングサイト「eキレイネット」でコラーゲンやヒアルロン酸などの美容関連製品を販売している。流出した疑いがあるのは、平成26年10月8日~27年11月5日、サイトでカードを使って商品を購入した顧客の氏名や住所、クレジットカードなどの情報だった。この間、19...
View Articleウェブアプリケーションにおいて「ホワイトリスト」と"White List"は用法が異なる
海外(主に米国)のウェブアプリケーションセキュリティのドキュメントを読むと、"white list input validation"という言い方がたびたび出てきます。たとえば、OWASPのSQL Injection Prevention Cheat Sheetには、まさにWhite List Input Validationという節があります。3.2 White List Input...
View ArticleStartSSLにドメイン認証不備の脆弱性
Osama almanna's blogにて、StartSSLにドメイン認証に脆弱性があったと報告されています。In 9 March, 2016 During my research I was able to replicate the attack and issue valid certificates without verifying the ownership of the...
View Articlehiddenなinput要素のXSSでJavaScript実行
脆弱性診断をやっていると、たまにtype=hiddenのinput要素にXSSがあるけど、現実的な攻撃には至らないものにぶちあたることがあります。サンプルコードを以下に示します。<body>入力確認をお願いします。<?php echo htmlspecialchars($_GET['t']); ?><br><form...
View ArticlePDOのサンプルで数値をバインドする際にintにキャストしている理由
先日PHPカンファレンス北海道2016にて「『例えば、PHPを避ける』以降PHPはどれだけ安全になったか」と題して基調講演を担当致しました。その際のスライドはこちら。そうしたところ、以下のご指摘をいただきました。@ockeghemスライド拝見しました。39番目のスライドですが、バインドのタイミングでintにキャストするのはちょっと例として良くない気がします。意図的にオーバーフローを起こすことで想定外...
View ArticleRuby on Railsの潜在的なリモートスクリプトインジェクション脆弱性CVE-2016-2098
今年の2月末に、Ruby on Railsに潜在的なリモートスクリプトインジェクションの脆弱性CVE-2016-2098が報告されています。攻撃コード(PoC)も公開されていますが、現実の攻撃が行われているという発表はないようです。この脆弱性の内容と対策について報告いたします。背景Hello Worldのような以下のシンプルなアプリケーション(コントローラ)を考えます。class...
View Articleアイ・オー・データのポケットルーターWFS-SR01の脆弱性について調べてみた
2016年11月2日に、アイ・オー・データ機器が販売する「ポケドラ」ことWFS-SR01に複数の脆弱性があることが報じられました。株式会社アイ・オー・データ機器が提供する WFS-SR01 は、無線 LAN ルータ機能を搭載したポータブルストレージ機器です。WFS-SR01 のポケットルーター機能には、次の複数の脆弱性が存在します。任意のコマンド実行 - CVE-2016-7806アクセス制限不備...
View ArticlePHPの全バージョンの挙動をCGIモードで試す
PHPの挙動を調べていると、マニュアルにも、ChangeLogにも載っていない変更にしばしば遭遇します。たとえば、PCRE系関数(preg_xxxx)の正規表現指定(第1引数)において、過去のPHPではNULLバイトを許容していましたが、最近のPHPでは、正規表現中のNULLバイトをエラーにしています。この変更は、マニュアルには載っておらず、ChangeLogには記載されているもののNULLバイトと...
View ArticlePDOに複文実行を禁止するオプションが追加されていた
エグゼクティブサマリPHP 5.5.21、PHP 5.6.5 以降、PHPにPDO::MYSQL_ATTR_MULTI_STATEMENTSというオプションが追加され、PDO+MySQLの組み合わせで、SQLの複文を禁止できるようになった。この設定はSQLインジェクションの緩和策として有効である。はじめに2013年12月に公開した...
View ArticlePHPMailerの脆弱性CVE-2016-10033について解析した
エグゼクティブサマリPHPMailerにリモートスクリプト実行の脆弱性CVE-2016-10033が公表された。攻撃が成功した場合、ウェブシェルが設置され、ウェブサーバーが乗っ取られる等非常に危険であるが、攻撃成功には下記の条件が必要であることがわかったPHPMailer...
View ArticlePHPのmail関数、mb_send_mail関数のマニュアルに警告が追記されていた
昨日の記事PHPMailerの脆弱性CVE-2016-10033について解析したにて、PHPMailerの脆弱性CVE-2016-10033の原因はmail関数が内部で呼んでいるescapeshellcmd関数の仕様が原因であると指摘しました。そして、mail関数の危険性については、小邨孝明さんが2013年12月23日の記事にて指摘していました。mb_send_mail関数(mail関数も同様)です...
View ArticlePHPのescapeshellcmdを巡る冒険はmail関数を経てCVE-2016-10033に至った
エグゼクティブサマリ2011年始めに徳丸がescapeshellcmdの危険性を指摘したが、この問題はmail関数のadditional_parameters経由で攻撃可能であることが2013年末に指摘された。その後2016年末に、PHPMailerの脆弱性CVE-2016-10033として現実のものとなった経緯2011/1/1...
View ArticleJoomla! 3.4まではUTF-8の4バイト文字を悪用して重複するログイン名が登録できた
以前の記事CMS四天王のバリデーション状況を調査したところ意外な結果になったで報告したように、Joomla!はログイン名の制限が非常にゆるやかになっています。であれば、🍣とか、💩などを含むログイン名が登録できるのだろうかという疑問が生じました。とはいえ、以前、Joomla!の「ゼロデイコード実行脆弱性」はPHPの既知の脆弱性が原因で報告したように、少なくともJoomla!...
View ArticleGodaddyのSSL証明書にドメイン認証の脆弱性があり8850件の証明書が失効された
エグゼクティブサマリGoDaddy社の発行するドメイン認証SSL証明書に認証不備の脆弱性があり、予防的な処置として8850件の発行済証明書が失効された。これは同期間に発行された証明書の2%未満である。現在は脆弱性は解消されている。概要GoDaddy社は米国のホスティング(レンタルサーバー)やレジストラの大手で、認証局(CA)の事業も手がけています。GoDaddyが発行するドメイン認証証明書の認証手続...
View ArticleWordPress 4.7.1 の権限昇格脆弱性について検証した
エグゼクティブサマリWordPress 4.7と4.7.1のREST APIに、認証を回避してコンテンツを書き換えられる脆弱性が存在する。攻撃は極めて容易で、その影響は任意コンテンツの書き換えであるため、重大な結果を及ぼす。対策はWordPressの最新版にバージョンアップすることである。 本稿では、脆弱性混入の原因について報告する。...
View ArticleWordPressのプラグインNextGEN GalleryのSQLインジェクション脆弱性について検証した
エグゼクティブサマリWordPressのプラグインNextGEN Gallery for WordPress...
View ArticleSQLiteのクォートにまつわる奇妙な仕様
SQLiteでは、ISO SQL標準同様に、文字列リテラルはシングルクォートで囲み、識別子をクォートする場合は、ダブルクォートで囲むことになっています。'foo' : 文字列リテラル"foo" : 識別子(テーブル名、列名等)しかし、マニュアルによると、SQLiteのクォーティングには例外があります。それを実例で紹介しましょぅ。まずは、実験の準備として、列 a だけを持つテーブル a...
View Article