ぶるーたるごぶりん

UI, UX, セキュリティとか😘

Content-Disposition の filename という地雷。 (1個の観点で17個の脆弱性を見つけた話)

English ver:
https://gist.github.com/motoyasu-saburi/1b19ef18e96776fe90ba1b9f910fa714#file-lack_escape_content-disposition_filename-md

TL;DR

  • 1つのブラウザ、1つのプログラミング言語、15個の { Web Framework, HTTP Client ライブラリ, Email ライブラリ / Web Service 等} で脆弱性を見つけました。
  • 見つけた脆弱性は、全て 1つの観点で発見した (多分 50-80 くらいのプロダクトの調査をした)。
  • RFC の記載では、(かなりわかりにくく)この問題に対する要件が記載されており、WHATWG > HTML Spec の方はしっかりと書かれているといった状況にある。
  • この問題は、 Content-Dispositionfilename, filename* というフィールドを明確なターゲットとしている。
  • この問題は、 HTTP Request / Response / Email の箇所で影響がそれぞれ変わる。
    • HTTP Request : リクエスト改竄(特にファイルコンテンツの改竄、他のフィールドの汚染等)
    • HTTP Response : Reflect File Download の脆弱性
    • Email : 添付ファイルの改竄(拡張子やファイル名の改竄と、潜在的なファイルコンテンツの改竄等)
  • これらの攻撃ベクトルの明確な攻撃対象として、 Content-Disposition (の filename, filename*) を見ている人は現在はあまりいない。
  • OWASP の刊行物でこのあたりをちゃんとまとめているのはパッと見ない。 ASVS ではこれに関する Issue が立てられている。
  • Content-Dispositionfilename, filename* はちゃんとエスケープしましょう。
    • filename:
      • " --> \" or %22
      • \r --> \\r or %0D
      • \n --> \\n or %0A
    • filename*:
      • ちゃんとフォーマットを守って URL Encode する

はじめに

どうも、涼宮カルビの牛角です。

この記事では、2018-2022 のリサーチ結果で発見した 脆弱性に関して書いていきます。 リサーチ期間が非常に長くなっていますが、単純にやる気のアップダウン等が入り混じって調査していない期間が長くなっただけです。実際の調査期間は 3ヶ月-半年程度です。

リサーチの結果、以下のプロダクト(?)で脆弱性を発見しました。

  • 1個の ブラウザ
  • 1個の プログラミング言語
  • 15個の {Web Framework / Library / Web Service } (あえてぼかすために混ぜてます)

見つけた問題は大きく以下の3つに分かれます。

  1. HTTP Request における multipart/form-data > Content-Disposition 上の filenameエスケープ不足による、ペイロード生成時のコンテンツ改竄の脆弱性
  2. HTTP Response における Content-Disposition ヘッダ上の filename, filename*エスケープ不足による、Reflect File Download の脆弱性
  3. Email の multipart > Content-Disposition における filenameエスケープ不足によるコンテンツ改竄の脆弱性
続きを読む

Meta(Facebook) の偽ECサイト (Phishing) 広告の自動検出

はじめに

こん〜!

今回は、いつかやろうと思っていた Meta(Facebook) 広告上でばら撒かれまくっている悪性広告を自動検出する試みについて、 うまくいったこと・いかなかったこと・考察等をまとめていこうと思います。

先にまとめ

  • Facebook の GraphQL API だと、検索できる広告タイプが限られており、 Graph API を用いた自動化は(現在は)できない
  • 広告ライブラリAPI という Web Page 機能 からの API サーチだと広告の検索が可能であり、悪性広告を検索可能
  • 広告ライブラリAPI からの検索は、(多分)全文検索だと思われるので、特定のキーワード・ドメインをキーワードとした検索が可能
  • 作成したカスタムクエリの一つは、検索結果の20件が全て悪性広告であった
  • 広告の先が悪性なECサイトであるかを判定する方法として、robots.txt を参照する方法を考案して実施した
  • Meta の広告審査方法はもう少し頑張っていただいて、よりよりプラットフォームになってほしい
続きを読む

Google の OSV と CPE の課題解決について

OSV と CPE

炭治郎です。コロナ2日目です。

自分は知らなかったのですが、 Google が2021年2月に OSV (Open Source Vulnerabilities) と言う脆弱性DBを公開していました。

https://opensource.googleblog.com/2021/02/launching-osv-better-vulnerability.html

この OSV に触れた国内記事はそれほど多くなく、 記事の内容自体も OSS-Fuzz について触れているケースが多そうでした。

ただ、自分的にはその点よりも以下の CPE の課題を解決してくれる点というのが非常に良さそうだと思いました。

This comes from the fact that versioning schemes in existing vulnerability standards (such as Common Platform Enumeration (CPE)) do not map well with the actual open source versioning schemes, which are typically versions/tags and commit hashes.

意訳すると、 CPE などが package manager 上の package 名などと対応していない問題があり、 それを OSV によって解決するという感じです。

この点について、既存のCPEを元にしたパッケージの特定の限界と、 OSV が良さそうという話をしてみようと思います。

続きを読む

GitHub を狙った Reverse Proxy 型フィッシングサイトの探索と報告

GitHub の Reverse Proxy 型フィッシングサイトの発見と報告

こんにちは、でじこだにょ

今回は GitHub を狙った Reverse Proxy 型のフィッシングサイトを探していこうと思います。 (長いので、Reverse Proxy 型のことをプロキシ型と略しちゃいます) 結論から書くと、24件のフィッシングサイトを新規に発見して報告しました。

今回はそれらのフィッシングサイトの探し方のほか、フィッシングサイトの検出方法や、 セーフブラウジングなどの話をしつつ、 今回見つけたフィッシングドメインに対して、簡単ではありますが、調査と考察を行ってみたいと思います。

探そうとしたきっかけ

数日前、 Twitter を見ていたところ、こちらのツイートが流れてきました。

画像を見る限り、対象ドメイン 520liyan[.]xyzGitHub を模したフィッシングサイトで、 いわゆる Reverse Proxy を用いたフィッシングサイトのように見えます。

続きを読む

パッケージマネージャで配布されるマルウェア、対策と課題について

はじめに

f:id:kumagoro_alice:20211127182904j:plain

画像は記事に全く関係ないカニのフィギュアです👋

近年、善良なパッケージを騙ったマルウェアが配布されているケースが増えてきています。 これらのマルウェアはパッケージマネージャ上で配布され、開発者端末やそれをビルトインしたシステムを利用するユーザー端末で悪事を働きます。

これは俗にいうサプライチェーン型攻撃で、 これらの関連ニュースを目にする機会が増えてきていることを、多くの開発者が体感されていると思います。

ただ、これらのサプライチェーン型攻撃の記事は、 どうしてもエンドユーザー(パッケージを利用する開発者側・それらを組み込んだアプリを実行するユーザー側)の対策に焦点が当てられたものが殆どのように感じています。

そこで本記事では、このエンドユーザー側の対策だけではなく、 パッケージマネージャメンテナーたちがどう対策しているのかも含めて、 「パッケージマネージャ上で行われるマルウェア配布」と、 「これの攻撃からどう保護していくのか」について、現状の課題を含めて書いていこうと思います。

続きを読む

植物の温室DIYした

記事のまとめ

  • やってることの殆どは、こちらの方の記事の真似
  • 最低限のセットで ¥37,580 円程度 (ライト2枚 2万円 + 棚 8000円の値段を含む)
  • 我が家もスマートハウス
  • 色々問題があったが、概ね解決

f:id:kumagoro_alice:20211021205028j:plain

買ったもの

ひとまず買ったものをバシバシ書きます。 組み立てや問題などについては後述します。

合計: ¥37,580 程度

上のが最低限の費用で、プラスで以下のものを買うと良いかもしれません。

  • ヒーター
  • サーキュレーター / 外付けファンなど
  • SwitchBot Hub(エアコンなどの制御)
  • 加湿器
続きを読む

パッケージファイルに擬態したマルウェアのコードを読む part1

ライブラリに擬態したマルウェアを見てく

今作ってるツールでどうしても複数の事例を知っておく必要があるので、 半分自分用に乱雑にまとめていく。

この記事では、主にPypi (Pythonのパッケージマネージャ)にて配布されていた 「ライブラリに似せた名前」のマルウェアのコードを見ていく。

とはいえ、かなりシンプルなものばかりだったので、 記事の内容的には微妙かも。

はじめに

近年、タイトルにある通りライブラリに擬態したマルウェアというのがそれなりに配布されていたりする。 これらは大抵の場合、 Typo Squatting と呼ばれる攻撃手法をベースにしてライブラリとして公開・配布されている。 これらのマルウェアは、インストール・使用した端末に対して、なにかしらの悪性なコードを実行させることを狙っている。

そもそも Typo Squatting とは、(大抵は)フィッシングサイトなどで悪用される攻撃テクニックで、 google[.]com などと、正規のドメインをタイピングしなければならないところを、 タイピングミスを狙って gooogle[.]com などと言った、少しだけズラしたドメインで、 悪性なサイトをホスティングし、被害者がタイポして悪性ドメインに訪れてくるのを待つ・・・という感じの攻撃が行われる。

先ほども書いた通り、大抵はフィッシングサイトで使われる攻撃手法だったのだが、 近年(特に観測範囲だと node.js, python 周り)で pypi などのパッケージマネージャーなどに マルウェアが上げられていることがある。 これらのマルウェアでは、先ほど言った Typo Squatting と呼ばれる攻撃手法が利用され、 有名なライブラリー名を少しだけズラした形でマルウェアが公開されていたりする。

つい最近の記事だと - というライブラリが npm で配布されており、 70万回ダウンロードされたとか。 https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/

こう言った背景もあり、Pypi から抽象構文木(AST)を使ったマルウェア検出を行った人がいたりする。 https://bertusk.medium.com/detecting-cyber-attacks-in-the-python-package-index-pypi-61ab2b585c67

まとめると、「問題ないライブラリと思ったら実はマルウェアでした」というのがこの攻撃の手法であり、 近年話題のサプライチェーン攻撃としてカテゴライズされている。

今回は「この辺りをもうちょっと(防御面で)なんとかできんのかー」と思い、 セコセコ亀のスピードで開発をしているツールのために、数個のマルウェアのコードを読んでいこうと思う。

なお、本記事はGithubやブログなどのオープンな情報をベースとしており、 マルウェアの流布などを目的とした反社会的行為を推奨してるわけではない。

続きを読む