blog of morioka12

morioka12のブログ (Security Blog)

2023年の振り返り

1. 始めに

こんにちは、morioka12 です。

今回は、morioka12 の「2023年の振り返り」ということで、簡単に今年あったことを振り返ってまとめてみようと思います。


2022年の振り返り

昨年の振り返りブログは、以下にまとめてあります。

scgajge12.hatenablog.com


2. タイムライン

覚えている範囲で、メインで取り組んでいたことを時系列ごとにまとめます。

1月

  • バグバウンティで脆弱性の調査をしてた
    • 脆弱性報告を複数件して報酬金を獲得した
  • Synack の「Synack Red Team (SRT)」に合格してメンバーになった


2月

  • Hack The Box の Machine や Challenge の問題を解いてた
    • 日本人ランキングで「6位」になった
  • 学校の課題や試験をまとめてやった
  • 春休みが開始
  • Golang で Web アプリケーションや CLI ツールなどの開発をしてた


3月

  • 学内で初心者向け CTF の作問&主催をした
  • Golang で Web アプリケーションや CLI ツールなどの開発をしてた
  • 同じ24卒の人や後輩とめっちゃ面談をした (受ける側)


4月

  • 4年生に進級した
  • 前期の授業が開始
  • Web 系の OSS を対象に既知の脆弱性(CVE)の検証&再現&コードリーディングをしてた
  • 以前の職場を退職した


5月

  • 新しい職場で働き始めた
  • Web 系の OSS を対象に既知の脆弱性(CVE)の検証&再現&コードリーディングをしてた
  • ブログ「CTF Cloud 問題の攻撃手法まとめ(2022年版)」を書いた

scgajge12.hatenablog.com


6月

scgajge12.github.io


7月

  • Web 系の OSS を対象に脆弱性の調査をした
    • 6件の CVE ID を取得した
  • OSS のバグバウンティプラットフォーム「huntr」で30日間のリーダーボードランキングで1位になった
  • 学校の課題や試験をまとめてやった

strapi.io


8月

  • 夏休み開始
  • バグバウンティで脆弱性の調査をしてた
    • 脆弱性報告を複数件して報酬金を獲得した
  • イベント「Security-JAWS DAYS」で AWS CTF の作問を担当した
  • ブログ「Security-JAWS DAYS 参加記&CTF作問者解説」を書いた
  • ブログ「Amazon EC2 におけるセキュリティ(脆弱性)事例」を書いた

scgajge12.hatenablog.com

scgajge12.hatenablog.com


9月

  • 勉強会「Security․Tokyo #2」に参加した
  • ブログ「フィッシングによる AWS ログインの MFA 認証の回避と事例」を書いた
  • ブログ「バグハント入門 (OSS編)」を書いた
  • ブログ「バグバウンティ入門(始め方)」を書いた
  • 後期の授業が開始

scgajge12.hatenablog.com

scgajge12.hatenablog.com

scgajge12.hatenablog.com


10月

  • 学校の卒業研究にメインに取り組んだ
  • 内定先で内定式に参加した
  • バグバウンティで脆弱性の調査をしてた
    • 脆弱性報告を複数件して報酬金を獲得した
  • CVE ID の Exploit のコードを書いてた
  • とあるコミュニティと後輩達との座談会を複数回開催した
  • ブログ「バグバウンティにおけるBug Bounty Hunterの実態調査まとめ」を書いた

scgajge12.hatenablog.com


11月

  • 学校の卒業研究にメインに取り組んだ
  • 学校で卒業研究の中間発表があった
  • ソフトウェアに対して脆弱性の調査・報告をした
  • 誕生日があった
  • 学校でとある学内発表を代表でした


12月

  • ブログ「バグバウンティで使えるおすすめの Burp Extensions 10選」を書いた
  • ブログ「バグバウンティで使えるおすすめのツール10選」を書いた
  • ブログ「バグバウンティにおける JavaScript の静的解析と動的解析まとめ」を書いた
  • ブログ「バグバウンティで使えるおすすめのブラウザ拡張機能10選」を書いた
  • イベント「SecHack365 Returns」に参加した
  • ブログ「バグバウンティにおける Critical な脆弱性報告の事例まとめ」を書いた
  • ブログ「バグバウンティにおけるモバイルアプリの脆弱性報告の事例まとめ」を書いた
  • ソフトウェアに対して脆弱性の調査・報告をした
  • 諸々の懇親会に参加した
  • ブログ「学生中に書いて反響が良かったブログ記事集(ベスト5)」を書いた
  • 冬休みが開始
  • ブログ「バグバウンティにおける人気脆弱性報告 Top 10 (2023年版)」を書いた

scgajge12.hatenablog.com

scgajge12.hatenablog.com

scgajge12.hatenablog.com

scgajge12.hatenablog.com

scgajge12.hatenablog.com

scgajge12.hatenablog.com

scgajge12.hatenablog.com

scgajge12.hatenablog.com


3. その他

学生中に書いて反響が良かったブログ記事集(ベスト5)

学生中に書いたブログをまとめました。

scgajge12.hatenablog.com


イベント「P3NFEST (ペンフェスト)」

来年の2024年2月にバグバウンティプラットフォームを運営する IssueHunt 株式会社が主催する、学生のためのサイバーセキュリティカンファレンスとして「P3NFEST Conf 2024」が開催されます。

今回は、IssueHunt の代表から直々にオファーを頂き、バグバウンティで脆弱性報告の経験を持つ学生としてセッションに登壇します。

issuehunt.jp


プライベート

プライベートに関しては、今年も充実して楽しめたかと思います。

X (Twiiter)は基本的に技術アカウントとして使っているため、 プライベートな話は Facebook の方で投稿してましたが、プライベートも充実してました。


4. 終わりに

簡単にですが、2023年の振り返りについてまとめました。

個人的には、学業も仕事もプライベートも、どれも両立して充実できたかなと思います。

今年は最後の学生生活ということで、基本的には自分のやりたいことをメインに取り組んだり、後輩と面談したり置き土産(贈り物)ブログを書き残したりなどしてました。

来年の4月から新社会人として働き始めますが、社会人になってからの次の目標や取り組みたいことなどがほぼ決まってきてるため、今後も自分なりに何かに取り組めればと思います。

今後ともどうぞよろしくお願い致します。


ここまでお読みいただきありがとうございました。

バグバウンティにおける人気脆弱性報告 Top 10 (2023年版)

1. 始めに

こんにちは、morioka12 です。

本稿では、2023年に HackerOne で報告された脆弱性レポートで最も人気投票が多かった Top 10 を紹介します。


対象の脆弱性レポート

  • 2023/01/01 ~ 2023/12/27
  • 既に開示されているレポート


2. Most Votes Top 10

10位: Stored XSS via Kroki diagram

  • Vote: 259
  • Severity: High
  • Weakness: Cross-site Scripting (XSS) - Stored
  • Bounty: $13,950

この脆弱性報告は、Gitlab で Kroki が有効な場合に、Issue に pre タグを指定することで、XSS が可能だったという指摘でした。

hackerone.com


9位: Insecure Direct Object Reference (IDOR) - Delete Campaigns

  • Vote: 283
  • Severity: High
  • Weakness: Insecure Direct Object Reference (IDOR)
  • Bounty: none

この脆弱性報告は、パラメーター「campaign_id」に所有していたい他のキャンペーンの ID を指定することで、そのキャンペーンを削除することが可能だったという指摘でした。

hackerone.com


  • Vote: 284
  • Severity: High
  • Weakness: Cross-site Scripting (XSS) - Generic
  • Bounty: none

この脆弱性報告は、パラメーター「canary」に指定した HTML タグが Cookie の「guvo」にそのまま指定されることで、XSS が可能だったという指摘でした。

hackerone.com


  • Vote: 292
  • Severity: High
  • Weakness: Server-Side Request Forgery (SSRF)
  • Bounty: $6,000

この脆弱性報告は、チャット機能のリクエストに対して、パラメーター「url」に内部の URL を指定することで、内部サービスのサーブス名とその内部 IP アドレスをのみを取得することが可能だったという指摘でした。

hackerone.com


6位: An attacker can can view any hacker email via /SaveCollaboratorsMutation operation name

  • Vote: 344
  • Severity: High
  • Weakness: Information Disclosure
  • Bounty: $7,500

この脆弱性報告は、ダミーレポートにコラボレーターとしてユーザーを招待する機能のリクエストに関して、登録されているユーザーのプライベートメールを閲覧することが可能だったという指摘でした。

hackerone.com


5位: Server Side Request Forgery (SSRF) via Analytics Reports

  • Vote: 346
  • Severity: Critical
  • Weakness: Server-Side Request Forgery (SSRF)
  • Bounty: $25,000

この脆弱性報告は、PDF のレポートを生成する機能のリクエストに関して、パラメーター「template」に HTML タグの iframe タグを指定して PDF を生成することで、SSRF により内部ファイルを読み込んだり、AWS サービスの認証情報を取得することが可能だったという指摘でした。

ちなみに、この脆弱性報告は、2023年の HackerOne の報告で最も報酬金額が高いレポートでした。

hackerone.com


4位: [accounts.reddit.com] Redirect parameter allows for XSS

  • Vote: 351
  • Severity: High
  • Weakness: Cross-site Scripting (XSS) - Generic
  • Bounty: $5,000

この脆弱性報告は、ログイン機能に関して、リダイレクト先を指定するパラメーター「dest」に XSS が可能だったという指摘でした。

hackerone.com


3位: [CVE-2022-44268] Arbitrary Remote Leak via ImageMagick

  • Vote: 360
  • Severity: Critical
  • Weakness: Remote File Inclusion
  • Bounty: none

この脆弱性報告は、アップロードされた画像のサイズなどを変更する機能に関して、脆弱な ImageMagick が使われていることによる任意コード実行(RCE)が可能だったという指摘でした。

hackerone.com


  • Vote: 392
  • Severity: High
  • Weakness: Improper Access Control - Generic
  • Bounty: $750

この脆弱性報告は、パスワードリセットのリクエストに関して、メールに送られてきた機微な情報となるパスワードリセットトークンを含む URL が安全でない「http」プロトコルが使われていたという指摘でした。

hackerone.com


1位: Delete anyone's content spotlight remotely.

  • Vote: 676
  • Severity: High
  • Weakness: Insecure Direct Object Reference (IDOR)
  • Bounty: $15,000

この脆弱性報告は、投稿した動画を削除するリクエストに対して、パラメーター「ids」を他人の動画の ID に改ざんすることで、他人の投稿した動画を削除することが可能だったという指摘でした。

hackerone.com


3. その他

2022年の Most Votes Top 10

参考までに、昨年のランキングは以下のようでした。

Rank Vote Weakness Bounty Link
1 441 Improper Access Control $10,000 link
2 300 IDOR $12,500 link
3 281 Path Traversal $29,000 link
4 268 Command Injection $33,510 link
5 263 Command Injection $33,510 link
6 260 Command Injection none link
7 255 Privilege Escalation $20,000 link
8 254 Buffer Overflow $10,000 link
9 235 IDOR $11,500 link
10 215 IDOR $20,000 link

ちなみに、2022年に報告された中で、Gitlab からの「$33,510」が最も報酬金額が高いレポートでした。


バグバウンティ入門(始め方)

scgajge12.hatenablog.com


4. 終わりに

本稿では、2023年に HackerOne で報告された脆弱性レポートで最も人気投票が多かった Top 10 を紹介しました。

ここまでお読みいただきありがとうございました。

学生中に書いて反響が良かったブログ記事集(ベスト5)

1. 始めに

こんにちは、morioka12 です。

本稿では、morioka12 が学生中に書いて反響が良かったブログ記事のベスト5をまとめて紹介します。


2. Best 5

1位: セキュリティ視点からの JWT 入門

  • はてなブックマーク: 410
  • はてなスター: 18
  • 公開日: 2020年12月10日 (1年生)

この記事は、1年生の時にサークル(IPFactory)のアドベントカレンダーの担当で書いた記事で、JWT (JSON Web Token)のセキュリティ周りについて学習した際のメモをブログ化してアウトプットしたものになります。

主に、JWT について学習しようとしている学生や、開発物に JWT を取り入れようとしている開発者を想定読者として、ブログを書きました。

記事を公開してから3年ほど経ちましたが、今でも Google 検索や CTF の Writeup の記事などから多くのアクセスがきています。

scgajge12.hatenablog.com

コメント(一部)

  • ちょうど最近JWTの話になったので読んでみたらすごいまとめだった (link)
  • セキュリティリスクまで含んだ良いまとめだった (link)
  • JWTの概要、リスク(攻撃手法)、対策方法がわかりやすくまとめられている良記事でした (link)
  • 攻撃観点で説明もらえるとなぜ提供側がそういう実装入れないとダメか分かりやすくて素敵 (link)
  • 面白いというか、JWTについて非常に良くまとめらていて、分かりやすい (link)

ツイート

https://twitter.com/scgajge12/status/1336864276347174912


2位: AWS Lambdaにおける脆弱性攻撃と対策

  • はてなブックマーク: 266
  • はてなスター: 9
  • 公開日: 2022年3月16日 (2年生)

この記事は、2年生の時に脆弱性診断などの業務をするセキュリティエンジニアとして長期インターンシップの勤務先で書いた記事で、AWS のサービスに関するセキュリティネタを書こうとした際にサーバーレスで有名な AWS Lambda で書いたものになります。

主に、普段から Lambda などの AWS サービスを扱っている開発者を想定読者として、ブログを書きました。

また、AWS Lambda に関するセキュリティネタで、わかりやすいスライド形式にまとめて Security-JAWS で登壇したスライドも現在「5.4k」アクセスほどあり、ブログと合わせて多くの方に見てもらえました。

blog.flatt.tech

AWS Lambdaにおけるセキュリティリスクと対策 - Speaker Deck

コメント(一部)

  • Lambdaのリスクや対策などが分かりやすくまとまっているすごく良い資料 。(link)
  • AWS Lambdaで実装する前に一読しておくと良さそうな記事。 (link)
  • どれも具体的で、非常に参考になりますね。(link)
  • 良いお勉強になりました (link)
  • Lambdaの脆弱性あまり考えたことなった、ありがたい記事💯 (link)

ツイート

https://twitter.com/scgajge12/status/1503921532837371904


3位: Amazon S3の脆弱な利用によるセキュリティリスクと対策

  • はてなブックマーク: 215
  • はてなスター: 2
  • 公開日: 2022年7月26日 (3年生)

この記事は、3年生の時に脆弱性診断などの業務をするセキュリティエンジニアとして長期インターンシップの勤務先で書いた記事で、AWS のサービスに関するセキュリティネタを書こうとした際に設定不備が発生しやすい Amazon S3 で書いたものになります。

主に、普段から S3 などの AWS サービスを扱っている開発者を想定読者として、ブログを書きました。

blog.flatt.tech

コメント(一部)

  • S3の設定不備に起因する脆弱性についてめっちゃ詳しくまとまっている記事。 (link)
  • Amazon S3の説明から主なセキュリティ設定の不備とその対策を網羅していて保存版 (link)
  • 事例についてと攻撃のユースケースと対策が詳細に書かれていて、めちゃ良記事でした。 (link)
  • 大事。S3は気軽に作れるし、作るシーンが多いぶんやらかしがち。 (link)
  • 超大作だ (link)

ツイート

https://twitter.com/scgajge12/status/1551749145978757121


4位: バグバウンティ入門(始め方)

  • はてなブックマーク: 81
  • はてなスター: 13
  • 公開日: 2023年9月25日 (4年生)

この記事は、4年生の時に書いた記事で、身近にバグバウンティに興味を持っている方がいたため、せっかくなので今までの経験を元にブログとしてアウトプットしたものになります。

主に、バグバウンティや脆弱性調査に興味のある方や、CTF Player・HTB Player などを想定読者として、ブログを書きました。

scgajge12.hatenablog.com

コメント(一部)

  • めちゃめちゃ詳細に書かれていてしゅごい。。。 (link)
  • バグバウンティの教科書のような記事ですごい。 (link)
  • 今のバグバウンティについてよくまとまっているかんじ。(link)

ツイート

https://twitter.com/scgajge12/status/1706118989448098079


5位: Amazon EC2 におけるセキュリティ(脆弱性)事例

  • はてなブックマーク: 73
  • はてなスター: 27
  • 公開日: 2023年8月31日 (4年生)

この記事は、4年生の時に書いた記事で、Security-JAWS DAYS で「EC2 × SSRF」を作問のテーマに担当したため、その際に紹介した事例等をまとめてブログとしてアウトプットしたものになります。

主に、普段から EC2 などの AWS サービスを扱っている開発者を想定読者として、ブログを書きました。

scgajge12.hatenablog.com

コメント(一部)

  • 一緒にEC2にまつわる脆弱性の事例集なども公開されていて、なかなか読みごたえがありますね。面白い。 (link)
  • EC2に絞った事例まとめ初めて見た!これは社内で査読会やりたいレベルですねー (link)

ツイート

https://twitter.com/scgajge12/status/1697066766369972497


3. その他

ランキング外

バグハント入門 (OSS編)

scgajge12.hatenablog.com

オフェンシブ視点による Cloud Security 入門 ~AWS 編~

scgajge12.hatenablog.com

新卒の学生によるセキュリティエンジニア志望の就活話

コメント(一部)

  • 「ほんとうに社会人ではない...?」と疑うくらいいい記事だった。過去の自分に記事のURLを送り付けたいレベル。 (link)
  • これは良い記事。自分も同じようなところから情報集めて就活してたの思い出した。 (link)
  • セキュリティ業界に就職したい学生は目を通しておくと良いと思う。 (link)
  • セキュリティに特化した学生を獲得したい組織の皆さんはこういうのは参考として読んでおくべきかなあと思います。 (link)

scgajge12.hatenablog.com

バグバウンティにおける JavaScript の静的解析と動的解析まとめ

scgajge12.hatenablog.com


ブログ一覧

scgajge12.hatenablog.com

b.hatena.ne.jp

scgajge12.github.io


4. 終わりに

本稿では、morioka12 が学生中に書いて反響が良かったブログ記事のベスト5をまとめて紹介しました。

主に Web Security や Cloud Security, Bug Bounty などのテーマにブログを書いていましたが、ブログを通して僕のことを認知した方も多くいらっしゃったかと思います。ありがとうございました。

2024年4月から新社会人として働き始めますが、社会人になっても定期的に何かアウトプットできればと思います。

今後ともどうぞよろしくお願いいたします。


ここまでお読みいただきありがとうございました。

バグバウンティにおけるモバイルアプリの脆弱性報告の事例まとめ

1. 始めに

こんにちは、morioka12 です。

本稿では、バグバウンティにおけるモバイルアプリケーションの脆弱性報告の事例についてまとめて紹介します。


免責事項

本稿の内容は、セキュリティに関する知見を広く共有する目的で執筆されており、悪用行為を推奨するものではありません。

想定読者

  • セキュリティ初学者・学生
    • 特に Mobile Security に興味がある方
  • モバイルアプリケーションの開発者
  • バグバウンティに興味がある方
  • (脆弱性調査をしている方)


2. Mobile Security Top 10

OWASP Mobile Top 10 2023 (初期リリース)

  1. 不適切な資格情報の利用
  2. 不十分なサプライチェーンセキュリティ
  3. 安全でない認証・承認
  4. 不十分な入出力の検証
  5. 安全でない通信
  6. 不十分なプライバシー管理
  7. 不十分なバイナリ保護
  8. セキュリティ設定の不備
  9. 安全でないデータ管理
  10. 不十分な暗号化

owasp.org

coky-t.gitbook.io


JSSEC Mobile Top 10 2023

  1. プラットフォームの不適切な利用
  2. 不適切なクレデンシャルの利用
  3. クライアントコードの品質と安全性
  4. 安全でない通信
  5. 安全でない認証
  6. 不十分な暗号化
  7. 安全でない認可制御
  8. コード改ざん
  9. 安全でないデータストレージ
  10. 余計な機能

www.jssec.org

https://www.jssec.org/wp-content/uploads/20230301-jssec-mobile-top10.pdf


3. 脆弱性報告の事例

バグバウンティにおいて、モバイルアプリケーションは、主に以下にようなタイプ(Asset Type)で提供されます。


XSS (Cross-site Scripting)

  • Android WebViews in Twitter app are vulnerable to UXSS due to configuration and CVE-2020-6506
    • Bounty: $560

hackerone.com

  • Blind Stored XSS on iOS App due to Unsanitized Webview
    • Bounty: $100

hackerone.com

  • [Grab Android/iOS] Insecure deeplink leads to sensitive information disclosure

hackerone.com

hackerone.com

  • UXss on brave browser via scan QR Code
    • Bounty: $500

hackerone.com

  • XSS via message subject - mobile application

hackerone.com

  • [Android] HTML Injection in BatterySaveArticleRenderer WebView
    • Bounty: $150

hackerone.com

hackerone.com


SQL Injection

  • GitHub Security Lab (GHSL) Vulnerability Report: SQLInjection in FileContentProvider.kt (GHSL-2022-059)
    • Bounty: $300

hackerone.com

  • SQL Injection found in NextCloud Android App Content Provider
    • Bounty: $150

https://hackerone.com/reports/291764hackerone.com

  • Local SQL Injection in Content Provider (ru.mail.data.contact.ContactsProvider) of Mail.ru for Android, version 12.2.0.29734

hackerone.com

  • SQLi allow query restriction bypass on exposed FileContentProvider
    • Bounty: $100

hackerone.com


CSRF (Cross-site Request Forgery)

  • Periscope iOS app CSRF in follow action due to deeplink
    • Bounty: $2,940

hackerone.com

hackerone.com

  • CSRF when unlocking lenses leads to lenses being forcefully installed without user interaction
    • $250

hackerone.com

  • Periscope android app deeplink leads to CSRF in follow action

hackerone.com


Path Traversal

  • Path Traversal в iOS приложении

hackerone.com

  • Path traversal in ZIP extract routine on LINE Android
    • Bounty: $475

hackerone.com

hackerone.com

  • Path traversal allows tricking the Talk Android app into writing files into it's root directory

hackerone.com

  • Path traversal allows tricking the Talk Android app into writing files into it's root directory

hackerone.com

  • Access to arbitrary file of the Nextcloud Android app from within the Nextcloud Android app
    • Bounty: $250

hackerone.com

  • Download attachments with traversal path into any sdcard directory (incomplete fix 106097)

hackerone.com


Improper Access Control

  • Default Nextcloud Server and Android Client leak sharee searches to Nextcloud
    • Bounty: $750

hackerone.com

  • Webview in LINE client for iOS will render application/octet-stream files as HTML
    • Bounty: $500

hackerone.com

  • Talk Android broadcast receiver is not protected by broadcastPermission allowing malicious apps to communicate

hackerone.com

  • Theft of arbitrary files in LINE Lite client for Android

hackerone.com

  • 1 click Account takeover via deeplink in [com.kayak.android]

hackerone.com

  • Sensitive files/ data exists post deletion of user account
    • Bounty: $150

hackerone.com


IDOR (Insecure Direct Object Reference)

  • read new emails from any inbox IOS APP in notification center

hackerone.com

  • IDOR for changing privacy settings on any memories

hackerone.com

  • Business Suite "Get Leads" Resulting in Revealing User Email & Phone

hackerone.com


Improper Authentication

  • Bypass of biometrics security functionality is possible in Android application (com.shopify.mobile)
    • Bounty: $500

hackerone.com

  • Weak user aunthentication on mobile application - I just broken userKey secret password
    • Bounty: $5,000

hackerone.com

  • App pin of the Android app can be bypassed via 3rdparty apps generating deep links
    • Bounty: $150

hackerone.com

  • Able to steal bearer token from deep link
    • Bounty: $6,337

hackerone.com

  • Two-factor authentication bypass on Grab Android App

hackerone.com

  • Authorization bypass using login by phone option+horizontal escalation possible on Grab Android App

hackerone.com

  • Bypassing lock protection
    • Bounty: $50

hackerone.com

  • Vine - overwrite account associated with email via android application

hackerone.com


Privilege Escalation

hackerone.com

hackerone.com

  • Android MailRu Email: Thirdparty can access private data files with small user interaction

hackerone.com


Information Disclosure

  • AWS bucket leading to iOS test build code and configuration exposure
    • Bounty: $1,500

hackerone.com

  • Possible to steal any protected files on Android
    • Bounty: $750

hackerone.com

  • Android content provider exposes password-protected share password hashes
    • Bounty: $75

hackerone.com

  • Notification implicit PendingIntent in com.nextcloud.client allows to access contacts
    • Bounty: $250

hackerone.com

hackerone.com

  • [Quora Android] Possible to steal arbitrary files from mobile device

hackerone.com

  • Extremly simple way to bypass Nextcloud-Client PIN/Fingerprint lock

hackerone.com


Information Exposure Through Debug Information

  • Grammarly Keyboard for Android <4.1 leaks user input through logs (except for sensitive input fields)

hackerone.com

  • Stealing Private Information in VK Android App through PlayerProxy Port Remotely

hackerone.com

hackerone.com


Use of Hard-coded Credentials

  • [█████████] Hardcoded credentials in Android App
    • Bounty: $500

hackerone.com

  • Hardcoded credentials in Android App

hackerone.com

  • Disclosure of all uploads to Cloudinary via hardcoded api secret in Android app

hackerone.com


Improper Export of Android Application Components

hackerone.com

  • Launch Any Activity in MyMail App

hackerone.com


DoS

  • url that twitter mobile site can not load
    • Bounty: $1,120

hackerone.com

  • iOS group chat denial of service
    • Bounty: $300

hackerone.com

  • DoS of LINE client for Android via message containing multiple unicode characters (0x0e & 0x0f)

hackerone.com

  • iOS app crashed by specially crafted direct message reactions
    • Bounty: $560

hackerone.com

  • DoS in Brave browser for iOS
    • Bounty: $80

https://hackerone.com/reports/357665hackerone.com


Privacy Violation

  • Changing email address on Twitter for Android unsets "Protect your Tweets"
    • Bounty: $2,940

hackerone.com

  • Mail.ru for Android - Theft of sensitive data

https://hackerone.com/reports/910398hackerone.com

  • [IRCCloud Android] Theft of arbitrary files leading to token leakage

hackerone.com


Cryptographic Issues

  • Twitter iOS fails to validate server certificate and sends oauth token
    • Bounty: $2,100

hackerone.com

  • Insecure Data Storage in Vine Android App
    • Bounty: $140

hackerone.com


Violation of Secure Design Principles

  • Phishing/Malware site blocking on Brave iOS can be bypassed with trailing dot in hostname
    • Bounty: $250

hackerone.com

  • ByPassing the email Validation Email on Sign up process in mobile apps
    • Bounty: $100

hackerone.com


4. その他

モバイルアプリの報告が多いプログラム(会社)


おすすめの学習コンテンツ

コンテンツ


やられアプリ


YouTube

  • Advanced Android Bug Bounty skills - Ben Actis, Bugcrowd's LevelUp 2017

www.youtube.com

www.youtube.com

www.youtube.com


Udemy


公式ドキュメント

  • OWASP Mobile Application Security Testing Guide (MASTG)

github.com

coky-t.gitbook.io

  • OWASP Mobile Application Security Testing Guide ja

github.com

  • Androidアプリのセキュア設計・セキュアコーディングガイド

www.jssec.org


ツール

bugbountyforum.com

github.com


参考ドキュメント (おすすめ系)

github.com

github.com

github.com

github.com

github.com

github.com

book.hacktricks.xyz

book.hacktricks.xyz


バグバウンティ入門(始め方)

バグバウンティの始め方については、以下のブログで紹介しているため、こちらもぜひご覧ください。

scgajge12.hatenablog.com


5. 終わりに

本稿では、バグバウンティにおけるモバイルアプリケーションの脆弱性報告の事例についてまとめて紹介しました。

モバイルアプリの開発をしている方でセキュリティに興味のある方は、ぜひ参考にしてみてください。

ここまでお読みいただきありがとうございました。

バグバウンティにおける Critical な脆弱性報告の事例まとめ

1. 始めに

こんにちは、morioka12 です。

本稿では、バグバウンティで実際に報告されている危険度が Critical (致命的)な Web アプリケーションの脆弱性について事例をもとに紹介します。


免責事項

本稿の内容は、セキュリティに関する知見を広く共有する目的で執筆されており、悪用行為を推奨するものではありません。

想定読者

  • セキュリティ初心者・中堅者
  • バグバウンティに興味がある方
  • リアルワールドで Critical な脆弱性を発見したい方
  • 脆弱性を報告して高額な報酬金を取得したい方

Critical な脆弱性

バグバウンティにおいて報告した脆弱性は、脆弱性の深刻度を示す重大度(Severity)が付けられて、基本的に CVSS (Common Vulnerability Scoring System, 共通脆弱性評価システム)によって判断します。

今回紹介する Critical な脆弱性は、CVSS のスコアが「9.0 ~ 10.0」な脆弱性を指します。

Severity Score
Critical 9.0 ~ 10.0
High 7.0 ~ 8.9
Medium 4.0 ~ 6.9
Low 0.1 ~ 3.9
None 0.0

docs.hackerone.com

www.bugcrowd.com

CVSS

CVSS は、主に以下のような観点で判断されます。

基本評価基準 (Base Metrics)

  • 攻撃の難易度を評価する項目
    • 攻撃元区分 (AV:Attack Vector)
    • 攻撃条件の複雑さ (AC:Attack Complexity)
    • 必要な特権レベル (PR:Privileges Required)
    • ユーザ関与レベル (UI:User Interaction)
  • 攻撃の影響度を評価する項目
    • 機密性への影響/情報漏えいの可能性 (C:Confidentiality Impact)
    • 完全性への影響/情報改ざんの可能性 (I:Integrity Impact)
    • 可用性への影響/業務停止の可能性 (A:Availability Impact)
  • 影響範囲の拡大の有無を評価する項目
    • スコープ (S:Scope)


また、CVSS のスコアが「9.0 ~ 10.0」になる脆弱性は、特に以下の観点が可能かで判定されたりします。

  • 特定の条件を必要とせずに、常に対象の Web アプリケーションに脆弱性攻撃が可能であるか
    • 評価が下がる例)
      • 特定のユーザーにのみ, 特定の設定の場合のみ
      • 特定の操作を他人にしてもらう必要がある場合
      • 事前に特定の情報収集がいくつか必要な場合
  • 対象の Web アプリケーションで機密情報を取得することが可能であるか
    • 機密情報の例)
      • 他人のアカウントの個人情報
      • Web アプリケーションで使われている有効な API Keyやクレデンシャル
      • Web アプリケーションやシステムに関する情報
  • 対象の Web アプリケーションで重要な情報を改ざんすることが可能であるか
    • 重要な情報の例)
      • 他人のアカウント情報
      • Web アプリケーションやシステムに関する情報

www.ipa.go.jp


2. Critical な脆弱性報告の事例

今回は、HackerOne の Hacktivity で報告されている Critical なレポートや、X (Twitter)で見かけられる事例をいくつか選んで紹介します。

基本的には、報酬金(Bounty)の獲得まで至っている報告事例を選んでいます。


XSS (Cross-site Scripting)

XSS は、主にアカウントの乗っ取り(Account Takeover)や他のユーザーの重要な情報の改ざんなどがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Stored XSS in markdown via the DesignReferenceFilter
    • Bounty: $16,000

hackerone.com

  • Blind XSS on image upload
    • Bounty: $1,000

hackerone.com

  • Multiple XSS on account settings that can hijack any users in the company.
    • Bounty: $700

hackerone.com

  • XSS in steam react chat client
    • Bounty: $7,500

hackerone.com

  • Web Cache Poisoning leading to 0 click ATO via Stored XSS

  • Blind XSS Leads To Employee User Details Leaked And Potential Account Takeover


SQL Injection

SQL Injection は、主にデータベースから機密情報の取得・改ざんなどがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • SQL Injection in report_xml.php through countryFilter[] parameter
    • Bounty: $25,000

hackerone.com

  • SQL injection on contactws.contact-sys.com in TScenObject action ScenObjects leads to remote code execution

hackerone.com

  • SQLi lead to dump full database on ~
    • Bounty: $2,500

  • SQL Injection On ~ Parameter [offset]

  • Easy Password for admin account: ~ Time Based SQL Injection

  • Error Based SQL-Injection with manual WAF bypass


Command Injection

Command Injection は、主に任意コードの実行(RCE)などがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Apache Flink RCE via GET jar/plan API Endpoint
    • Bounty $6,000

hackerone.com

  • Remote code execution on Basecamp.com
    • Bounty: $5,000

hackerone.com

  • Local files could be overwritten in GitLab, leading to remote command execution
    • Bounty: $12,000

hackerone.com

  • SSTI leading to RCE


SSRF (Server Side Request Forgery)

SSRF は、主に内部サーバーから機密情報の取得やクラウドインスタンスメタデータの取得などがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Server Side Request Forgery (SSRF) via Analytics Reports

hackerone.com

  • SSRF via Office file thumbnails
    • Bounty: $4,000

hackerone.com

  • Full read SSRF via Lark Docs import as docs feature
    • Bounty: $5,000

hackerone.com

  • Stored XSS & SSRF in Lark Docs
    • Bounty: $3,000

hackerone.com


Path Traversal

Path Traversal は、主に機密情報を含むファイルの取得がインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Arbitrary file read via the bulk imports UploadsPipeline
    • Bounty: $29,000

hackerone.com

  • Arbitrary file read during project import
    • Bounty: $16,000

hackerone.com


Code Injection

Code Injection は、主に任意コードの実行(RCE)などがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • RCE when removing metadata with ExifTool
    • Bounty: $20,000

hackerone.com

  • RCE due to ImageTragick v2
    • Bounty: $2,000

hackerone.com

  • RCE via npm misconfig -- installing internal libraries from the public registry
    • Bounty: $30,000

hackerone.com

  • Git flag injection - local file overwrite to remote code execution
    • Bounty: $12,000

hackerone.com

  • Git flag injection leading to file overwrite and potential remote code execution
    • Bounty: $3,500

hackerone.com

  • Remote Code Execution (RCE) Vulnerability with File Upload
    • Bounty: $1,500


XXE (XML External Entitie)

XXE は、主に SSRF や任意コードの実行(RCE)などがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • LFI and SSRF via XXE in emblem editor
    • Bounty: $1,500

hackerone.com


Insecure Deserialization

  • Remote code execution on rubygems.org
    • Bounty: $1,500

hackerone.com


Improper Access Control

Improper Access Control は、主に機密情報の取得・改ざんやアカウントの乗っ取りなどがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • One-click account hijack for anyone using Apple sign-in with Reddit, due to response-type switch + leaking href to XSS on www.redditmedia.com
    • Bounty: $10,000

hackerone.com

  • Getting all the CD keys of any game
    • Bounty: $20,000

hackerone.com


IDOR (Insecure Direct Object Reference)

IDOR は、主に機密情報の取得・改ざんやアカウントの乗っ取りなどがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Steal private objects of other projects via project import
    • Bounty: $20,000

hackerone.com

  • Private objects exposed through project import
    • Bounty: $20,000

hackerone.com

  • Email change or personal data change on the account.
    • Bounty: $3,000

hackerone.com

  • IDOR leads to read all users PII Informations and card details in
    • Bounty: $1,500

  • IDOR due to flawed signature verification of JWT can lead to various vulnerabilites
    • Bounty: $6,000

  • ~IDOR Allows Read/Write Access ~
    • Bounty: $10,000


Improper Authentication

Improper Authentication は、主に機密情報の取得・改ざんやアカウントの乗っ取りなどがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Incorrect authorization to the intelbot service leading to ticket information
    • Bounty: $15,000

hackerone.com

  • Critical full compromise of jarvis-new.urbanclap.com via weak session signing
    • Bounty: $1,500

hackerone.com

  • H1514 [*.(my)shopify.com] - Viewing Password Protected Content
    • Bounty: $3,000

hackerone.com

  • User able to access company details in yrityspalvelu without proper permissions
    • Bounty: $2,000

hackerone.com

  • Shopify admin authentication bypass using partners.shopify.com
    • Bounty: $20,000

hackerone.com

  • ~ Administrator portal access allows for ~ security setting manipulation and a large PII leak consisting of ~

  • ~ web console Default login credentials


Privilege Escalation

  • Remote Code Execution in coming Kibana 7.7.0
    • Bounty: $5,000

hackerone.com

  • Remote Code Execution on Cloud via latest Kibana 7.6.2
    • Bounty: $10,000

hackerone.com

  • Project Template functionality can be used to copy private project data, such as repository, confidential issues, snippets, and merge requests
    • Bounty: $12,000

hackerone.com

  • Worker container escape lead to arbitrary file reading in host machine [again]
    • Bounty: $2,000

hackerone.com

  • Worker container escape lead to arbitrary file reading in host machine
    • Bounty: $2,000

hackerone.com


Information Disclosure

Information Disclosure は、主に機密情報の取得・改ざんなどがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • JSON serialization of any Project model results in all Runner tokens being exposed through Quick Actions
    • Bounty: $12,000

hackerone.com

  • API Key leakage leads to Pll ~
    • Bounty: $3,000

  • IDOR
    • Bounty: $1,500


Information Exposure

Information Exposure は、主に機密情報の取得がインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Full Data Sensitive Data Exposure Leak!
    • Bounty: €2,500


Authentication Bypass

Improper Authentication は、主に認証機能の回避やアカウントの乗っ取りなどがインパクトとして実際に可能であれば、Critical な報告になる可能性があります。

  • Mass Account Takeover at https://app.taxjar.com/ - No user Interaction
    • Bounty: $11,500

hackerone.com


HTTP Request Smuggling

  • HTTP Request Smuggling via HTTP/2
    • Bounty: $7,500

hackerone.com

  • HTTP request smuggling on Basecamp 2 allows web cache poisoning
    • Bounty: $1,700

hackerone.com

  • Unauthenticated request smuggling on launchpad.37signals.com
    • Bounty: $1,737

hackerone.com


Race Condition

  • Ability to bypass partner email confirmation to take over any store given an employee email
    • Bounty: $15,250

hackerone.com


Business Logic Errors

  • Modify in-flight data to payment provider Smart2Pay
    • Bounty: $7,500

hackerone.com

  • Double Payout via PayPal
    • Bounty: $10,000

hackerone.com


Misconfiguration

  • ~
    • Bounty: $10,000


3. まとめ

以上に報告事例から、脆弱性攻撃により主に以下のようなことが実際に可能な場合に Critical な脆弱性と認定される可能性があります。

  • アカウントの乗っ取り
    • XSS, Improper Authentication, Privilege Escalation, Authentication Bypass
  • 個人情報の取得・改ざん
    • XSS, SQL Injection, Improper Access Control, IDOR, Privilege Escalation, Information Disclosure, Information Exposure
  • 機密情報の取得(露出)・改ざん
    • Path Traversal, Improper Access Control, Improper Authentication
  • 任意コードの実行
    • SQL Injection, Command Injection, SSRF, Code Injection, XXE, Insecure Deserialization, Privilege Escalation


また、初心者が初めて Critical な脆弱性を発見したい場合は、例として主に以下のような点を確認すると良いと思います。

  • XSS
    • XSS で他人の Cookie などを取得して、アカウントの乗っ取りまでできるか
    • 重要な処理をするエンドポイントや API を活用して、XSS で他人のパスワードやメールアドレスなどを改ざんして、アカウントの乗っ取りまでできるか
  • SQL Injection
    • SQLi でデータベースにアクセスして、実際に機密情報が取得できるか
  • SSRF
  • Path Traversal
    • PathTrav で実際にシステムファイルやハードコードされた設定ファイルなどの機密情報となるファイルが取得できるか
  • Improper Access Control, IDOR, Improper Authentication
    • アクセス制御の不備系で、実際に個人情報などの機密情報が取得できるか・改ざんできるか・アカウントの乗っ取りまでできるか
  • Information Disclosure, Information Exposure
    • 情報の開示で、実際に有効な API Key や設定ファイル、個人情報などの機密情報が取得できるか

ちなみに、こういった Critical な脆弱性の検証をする際は、対象は本番環境がほとんどのため、慎重に検証する必要があります。

参考までに、以下の注意点を確認してみてください。

https://scgajge12.hatenablog.com/entry/bugbounty_beginner#%E6%B3%A8%E6%84%8F%E7%82%B9


4. その他

HackerOne Hacktivity

HackerOne では、報告された脆弱性のレポートが公開されたら、以下の Hacktivity で公開されます。

hackerone.com

github.com


バグバウンティ入門(始め方)

バグバウンティの始め方については、以下のブログで紹介しているため、こちらもぜひご覧ください。

scgajge12.hatenablog.com


5. 終わりに

本稿では、バグバウンティで実際に報告されている危険度が Critical (致命的)な Web アプリケーションの脆弱性について事例をもとに紹介しました。

バグバウンティにおいて、先人のバグハンターがどういった点を脆弱性として報告されているかの事例を知ることは、観点としてとても大切です。

ぜひ、過去の報告書を拝見して、指摘事項や観点、考え方などを参考にしてみてください。

ここまでお読みいただきありがとうございました。

バグバウンティで使えるおすすめのブラウザ拡張機能10選

1. 始めに

こんにちは、morioka12 です。

本稿では、バグバウンティなどの脆弱性調査で使える、おすすめのブラウザの拡張機能を10個紹介します。


免責事項

本稿の内容は、セキュリティに関する知見を広く共有する目的で執筆されており、悪用行為を推奨するものではありません。

想定読者

  • セキュリティ初学者・学生
    • 特に Web Security の学習をしている方
  • バグバウンティに興味がある方
  • (脆弱性調査をしている方)
  • ( Web アプリケーションの開発者)


2. Browser Extensions

2.1 Wappalyzer

Wappalyzer は、Web アプリケーションに使われている技術やフレームワークCMS や外部サービスなどの情報を取得することができます。

これにより、バージョンから潜在的脆弱性(CVE)を探したり、サーバーやクラウドの設定不備などを探すのに役立ちます。

addons.mozilla.org

chrome.google.com

www.wappalyzer.com


2.2 Shodan

Shodan は、Web アプリケーションがホストされている IP アドレスやホスト名、ポート番号などの情報を取得することができます。

これにより、ホスティングサービスの特定や、80・443番ポートが以外の開いているポート番号などを手軽に特定することが可能です。

addons.mozilla.org

chrome.google.com

www.shodan.io


2.3 Retire.js

Retire.js は、Web アプリケーションに使われている JavaScript のライブラリをチェックして、バージョンから潜在的なセキュリティ問題を検出することができます。

これにより、古いバージョンにある既知の脆弱性を特定することが可能です。

addons.mozilla.org

chrome.google.com

retirejs.github.io


2.4 Hackbar

Hackbar は、ブラウザの開発者ツールに HackBar タブが追加されて、脆弱性の検証やエンコーディングハッシュ値を簡単に扱うことができます。

addons.mozilla.org

chrome.google.com

github.com


2.5 Mitaka

Mitaka は、Web アプリケーションにある特定の URL や IP アドレス、文字列などに対して OSINT やスキャンを手軽にすることができます。

addons.mozilla.org

chrome.google.com

github.com


2.6 Trufflehog

Trufflehog は、Web アプリケーション内にハードコードされている API Key や認証情報などを検出して確認することができます。

addons.mozilla.org

chrome.google.com

github.com


2.7 DotGit

DotGit は、Web アプリケーションで .git が含まれて公開されているかを検出して確認することができます。

addons.mozilla.org

chrome.google.com

github.com


2.8 FoxyProxy Standard

FoxyProxy Standard は、プロキシサーバーにアクセスするためのブラウザの設定を手軽に切り替えることができます。

addons.mozilla.org

chrome.google.com


2.9 Firefox Multi-Account Containers

Firefox Multi-Account Containers は、タブグループを作成して、グループ(コンテナ)単位で、別々のアカウントでログイン状態を保つことができます。

これにより、簡単にアクセス制御の不備などを手動で検証することができます。

addons.mozilla.org


Cookie-Editor は、タブの Cookie を作成・編集・削除を手軽にできます。

addons.mozilla.org

chrome.google.com


3. その他

バグバウンティ入門(始め方)

バグバウンティの始め方については、以下のブログで紹介しているため、よければこちらもご覧ください。

scgajge12.hatenablog.com


参考ドキュメント・コメント

book.hacktricks.xyz

securitycipher.com

www.p1boom.com


4. 終わりに

本稿では、バグバウンティなどの脆弱性調査で使える、おすすめのブラウザの拡張機能を10個紹介しました。

ブラウザが重くならない程度に拡張機能を有効的に使い、手軽に得たい情報はぜひこれらを活用してみてください。

ここまでお読みいただきありがとうございました。

バグバウンティにおける JavaScript の静的解析と動的解析まとめ

1. 始めに

こんにちは、morioka12 です。

本稿では、バグバウンティなどの脆弱性調査で行う、JavaScript の静的解析と動的解析についてまとめて紹介します。


免責事項

本稿の内容は、セキュリティに関する知見を広く共有する目的で執筆されており、悪用行為を推奨するものではありません。

想定読者

  • セキュリティ初学者・学生
    • 特に Web Security の学習をしている方
  • バグバウンティに興味がある方
  • (脆弱性調査をしている方)
  • ( Web アプリケーションの開発者)

検証環境

今回は、ツールの検証環境として、「OWASP Juice Shop」を活用します。

OWASP Juice Shop は、「OWASP Top 10」に含まれる脆弱性を取り入れた「やられアプリ」で、Node.js・Express・Angular などの JavaScriptフレームワークで書かれています。

  • http://localhost/#/
    • ( Docker でローカル環境に構築)


静的解析と動的解析

  • 静的解析 (Static Analysis)
  • 動的解析 (Dynamic Analysis)
    • 実際にソースコードが実行されて、その挙動をベースに解析する方法


2. 静的解析 (Static Analysis)

Web アプリケーション上にある JavaScript ファイルを静的解析する場合は、主に以下のような点を確認します。


また、JavaScript ファイルの静的解析は、主に以下のような流れで行います。

  1. 対象の Web アプリケーションのドメインから JavaScript ファイルの URL を収集する
  2. 収集した JavaScript ファイルからコードを解析してエンドポイントを列挙する
    • まだ未発見だったエンドポイントや API 、パラメーターを知れる可能性がある
  3. 収集した JavaScript ファイルからコードを解析してシークレットな情報を検出する
    • ハードコードされている API の認証情報など得れる可能性がある
  4. 収集した JavaScript ファイルで使われているライブラリやフレームワークなどを特定して潜在的脆弱性を特定する
    • 実際の Web アプリケーションで有効に活用できるセキュリティ問題を得れる可能性がある


2.1 JavaScript File の URL を収集する

getJS

getJS は、指定したドメインから JavaScript のファイルの URL を収集することができます。

$ getJS --url https://<Domain> --complete

検証環境に対する実行結果 (クリックで表示)

$ getJS --url http://localhost --complete
http://cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js
http://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js
http://localhost//runtime.js
http://localhost//polyfills.js
http://localhost//vendor.js
http://localhost//main.js

github.com


hakrawler

hakrawler は、クローリングツールで、URL と JavaScript のファイルを収集することができます。

$ echo "https://<Domain>" | hakrawler

検証環境に対する実行結果 (クリックで表示)

$ echo "http://localhost" | hakrawler
http://cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js
http://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js
http://localhost/runtime.js
http://localhost/polyfills.js
http://localhost/vendor.js
http://localhost/main.js

github.com


getallurls (gau)

getallurls (gau) は、 Wayback Machine などから既知の URL を列挙するツールで、その出力結果から JavaScript のファイルのみを抽出して収集することもできます。

$ gau <Domain> | grep ".js$" | sort -u

github.com


2.2 エンドポイントを列挙する

LinkFinder

LinkFinder は、ドメインから JavaScript ファイル内にあるエンドポイントを列挙することができます。

$ python3 linkfinder.py -i https://<Domain> -d -o cli
$ python3 linkfinder.py -i https://<Domain>/<Path>/<JS-file> -o cli

検証環境に対する実行結果 (クリックで表示)

$ python3 linkfinder.py -i http://localhost -d -o cli
 ...
Running against: http://localhost/runtime.js

Running against: http://localhost/polyfills.js

https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE
https://github.com/zloirock/core-js
Running against: http://localhost/vendor.js

text/css
http://www.w3.org/2000/svg
/assets/i18n/
image/png
/engine.io
application/octet-stream
application/pdf
application/msword
image/photoshop
image/x-photoshop
image/psd
application/photoshop
application/psd
zz-application/zz-winassoc-psd
application/x-gtar
application/x-gcompress
application/compress
application/x-tar
application/x-rar-compressed
application/x-zip-compressed
application/zip-compressed
application/x-7z-compressed
application/gzip
application/x-bzip2
/socket.io
text/plain
application/json
https://g.co/ng/security#xss
text/html
M/d/yy
zone.js
http://www.w3.org/1999/xhtml
http://www.w3.org/1999/xlink
http://www.w3.org/XML/1998/namespace
http://www.w3.org/2000/xmlns/
http://www.w3.org/1998/MathML/
Running against: http://localhost/main.js

/rest/admin
/application-configuration
/rest/web3
/nftUnlocked
/nftMintListen
/api/Challenges/?key=nftMintChallenge
/submitKey
/walletNFTVerify
/walletExploitAddress
/rest/admin/application-configuration
privacy-security/privacy-policy
https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/771984076&amp;color=%23ff5500&amp;auto_play=true&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true
/assets/public/images/hackingInstructor.png
https://ponzico.win/ponzico.pdf
https://www.sec.gov/investor/alerts/ia_virtualcurrencies.pdf
assets/public/images/padding/56px.png
/api/Users
/rest/user/authentication-details/
/rest/user/login
/rest/user/change-password?current=
/rest/user/reset-password
/rest/user/whoami
https://www.googleapis.com/oauth2/v1/userinfo?alt=json&amp;access_token=
/rest/saveLoginIp
/rest/deluxe-membership
/login
/api/BasketItems
assets/public/images/products/
/address/select
/rest/track-order
/api/Feedbacks
/rest/captcha
/160
assets/public/images/carousel/1.jpg
assets/public/images/carousel/2.jpg
assets/public/images/carousel/3.jpg
assets/public/images/carousel/4.jpg
assets/public/images/carousel/5.png
assets/public/images/carousel/6.jpg
assets/public/images/carousel/7.jpg
ftp/legal.md
/api/SecurityAnswers
/api/SecurityQuestions
/rest/user/security-question?email=
/20
/40
/rest/products
/reviews
/api/Products
/api/Quantitys
assets/public/images/products/no-results.png
/search
/2fa/enter
/forgot-password
/register
assets/public/images/padding/19px.png
/api/Complaints
/file-upload
application/pdf
application/xml
text/xml
application/zip
application/x-zip-compressed
multipart/x-zip
/rest/chatbot
/status
/respond
assets/public/images/ChatbotAvatar.png
assets/public/images/uploads/default.svg
/api/Recycles
/api/Addresss
/address/edit/
/delivery-method
/address/create
/api/Challenges
/rest/repeat-notification
/rest/continue-code
/rest/continue-code-findIt
/rest/continue-code-fixIt
/rest/continue-code/apply/
/rest/continue-code-findIt/apply/
/rest/continue-code-fixIt/apply/
/snippets
/snippets/fixes
/snippets/verdict
https://docs.google.com/forms/d/e/1FAIpQLSdaNEuz0dzFA2sexCa0AJ4QOb2OYdEL04eQOLFD2Y4T-BW6ag/viewform?usp=pp_url&amp;entry.384948954=
https://forms.gle/2Tr5m1pqnnesApxN8
/score-board-preview
assets/public/images/padding/1px.png
http://www.w3.org/2000/svg
/rest/image-captcha/
/rest/user
/erasure-request
/data-export
https://www.freeprivacypolicy.com/
assets/public/images/padding/81px.png
/rest/wallet/balance
/api/Deliverys
/api/Cards
/16
/10
/wallet
/deluxe-membership
/order-summary
./redirect?to=https://blockchain.info/address/1AbKfgvw9psQ41NbLi8kufDQTezwG8DRZm
./redirect?to=https://explorer.dash.org/address/Xr556RzuwX6hg5EGpkybbv5RanJoZN17kW
./redirect?to=https://etherscan.io/address/0x0f933ab9fcaaa782d0279c300d73750e1311eae6
https://pwning.owasp-juice.shop/part3/donations.html
./redirect?to=http://shop.spreadshirt.com/juiceshop
./redirect?to=http://shop.spreadshirt.de/juiceshop
./redirect?to=https://www.stickeryou.com/products/owasp-juice-shop/794
./redirect?to=http://leanpub.com/juice-shop
https://opensea.io/collection/juice-shop
/rest/order-history
/orders
https://twitter.com/
/track-result/new
https://twitter.com/intent/tweet?text=
/order-completion
/payment
/#/wallet-web3
/track-result
/rest/memories
multipart/form-data
assets/public/images/JuiceShop_Logo.png
assets/public/images/deluxe/blankBoxes.png
assets/public/images/products/juicy_chatbot.jpg
https://testnets.opensea.io/0x8343d2eb2B13A2495De435a1b15e85b98115Ce05
https://testnets.opensea.io/assets/mumbai/0xf4817631372dca68a25a18eb7a0b36d54f3dbcf7/0
/score-board
address/select
address/saved
address/create
track-result/new
2fa/enter
/application-version
privacy-security/data-export
privacy-security/change-password
privacy-security/two-factor-authentication
privacy-security/last-login-ip
assets/public/images/
/profile
/dataerasure
http://www.w3.org/1999/html
/accounting
/basket
/order-history
/recycle
/address/saved
/saved-payment-methods
https://owasp.org
https://owasp-juice.shop
/rest/country-mapping
/contact
/complain
/chatbot
/about
/photo-wall
./redirect?to=https://github.com/juice-shop/juice-shop
./assets/i18n/
image/x-icon
assets/public/favicon_js.ico
text/css
//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.css
//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js
//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js
https://www.youtube.com/watch?v=9PnbKL3wuH4
runtime.js
polyfills.js
vendor.js
main.js

github.com


xnLinkFinder

xnLinkFinder は、ドメインから JavaScript ファイル内にあるエンドポイントやパラメーターを列挙することができます。

$ python3 xnLinkFinder.py -i <Domain> -sp https://<Domain> -sf <Domain> -v

github.com


katana

katana は、クローリングツールで、オプションで JavaScript ファイルの解析と JavaScript ファイル内からエンドポイントをクロールする「-js-crawl」があり、これを使うことでエンドポイントを列挙することができます。

$ katana -u http://<Domain> -jc

検証環境に対する実行結果 (クリックで表示)

$ katana -u http://localhost -jc          

   __        __                
  / /_____ _/ /____ ____  ___ _
 /  '_/ _  / __/ _  / _ \/ _  /
/_/\_\\_,_/\__/\_,_/_//_/\_,_/                             

      projectdiscovery.io

[INF] Current katana version v1.0.4 (latest)
[INF] Started standard crawling for => http://localhost/
http://localhost/
http://localhost/runtime.js
http://localhost/polyfills.js
http://localhost/main.js
http://localhost/styles.css
http://localhost/rest/country-mapping
http://localhost/redirect?to=https
http://localhost/rest/admin
http://localhost/rest/web3
http://localhost/vendor.js
http://localhost/redirect?to=http
http://localhost/assets/public/images/
http://localhost/rest/admin/application-configuration
http://localhost/api/Cards
http://localhost/address/saved
http://localhost/assets/i18n/
http://localhost/rest/order-history
http://localhost/rest/wallet/balance
http://localhost/snippets/verdict
http://localhost/snippets/fixes
http://localhost/track-result/new
http://localhost/rest/user
http://localhost/rest/image-captcha/
http://localhost/rest/continue-code-findIt/apply/
http://localhost/rest/continue-code-fixIt/apply/
http://localhost/rest/continue-code
http://localhost/rest/repeat-notification
http://localhost/rest/continue-code/apply/
http://localhost/api/Addresss
http://localhost/api/Recycles
http://localhost/address/create
http://localhost/address/edit/
http://localhost/api/Complaints
http://localhost/rest/chatbot
http://localhost/2fa/enter
http://localhost/rest/products
http://localhost/rest/memories
http://localhost/api/SecurityAnswers
http://localhost/rest/user/security-question?email=
http://localhost/rest/track-order
http://localhost/%5C/index.html
http://localhost/application/vnd.ms-word.do
http://localhost/application/vnd.openxmlformats-officedocument.wordprocessingml.do
http://localhost/angular.json
http://localhost/Highlight.js
http://localhost/like/
http://localhost/address/select
http://localhost/assets/public/images/products/
http://localhost/api/BasketItems
http://localhost/rest/deluxe-membership
http://localhost/rest/saveLoginIp
http://localhost/rest/user/whoami
http://localhost/rest/user/reset-password
http://localhost/rest/user/change-password?current=
http://localhost/rest/captcha
http://localhost/api/Deliverys
http://localhost/rest/user/authentication-details/
http://localhost/rest/continue-code-fixIt
http://localhost/rest/continue-code-findIt
http://localhost/api/Users
http://localhost/rest/user/login
http://localhost/Edge/
http://localhost/Trident/
http://localhost/zone.js
http://localhost/Zone.js
http://localhost/api/Quantitys
http://localhost/api/Products
http://localhost/api/SecurityQuestions
http://localhost/api/Challenges
http://localhost/api/Feedbacks

github.com


jsluice

jsluice は、JavaScript ファイルから URL やエンドポイントなどを列挙することができます。

$ jsluice urls https://<Domain>/<Path>/<JS-file> | jq

検証環境に対する実行結果 (クリックで表示)

(出力結果が長いため、Gist に丸ごと添付しました)

$ jsluice urls http://localhost/main.js | jq         
{
  "url": "/rest/admin",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/application-configuration",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/rest/web3",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/nftUnlocked",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/nftMintListen",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/api/Challenges/?key=nftMintChallenge",
  "queryParams": [
    "key"
  ],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/submitKey",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/walletNFTVerify",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/walletExploitAddress",
  "queryParams": [],
  "bodyParams": [],
  "method": "",
  "type": "stringLiteral",
  "filename": "http://localhost/main.js"
}
{
  "url": "/rest/admin/application-configuration",
  "queryParams": [],
  "bodyParams": [],
  "method": "GET",
  "type": "fetch",
  "filename": "http://localhost/main.js"
}
 ...

github.com


endext

endext は、JavaScript ファイルからエンドポイントなどを列挙することができます。

$ go run main.go -l urls-js.txt

検証環境に対する実行結果 (クリックで表示)

urls-js.txt は、以下のように JavaScript ファイルの URL 一覧が記載されているとします。

(このファイルの生成方法は、「4. その他 > JS Analyze に使える Burp の機能 > Copy URLs」で紹介しています)

$ cat urls-js.txt 
http://localhost/103.js
http://localhost/main.js
http://localhost/polyfills.js
http://localhost/runtime.js
http://localhost/vendor.js
$ go run main.go -l urls-js.txt      

                  ______          ________     __   
                 / ____/___  ____/ / ____/  __/ /_  
                / __/ / __ \/ __  / __/ | |/_/ __/  
               / /___/ / / / /_/ / /____>  </ /_      
              /_____/_/ /_/\__,_/_____/_/|_|\__/    

            ( * ) EndpointsExtractor Tool By @SirBugs .go Version
            ( * ) For Extracting all possilbe endpoints from Js files 
            ( * ) Version: 1.0.5 (Updated 3.Vrs on 7/7/2023)
            ( * ) Contact: Twitter@SirBagoza, GitHub@SirBugs, Medium@bag0zathev2
            ( * ) Command: go run main.go -l jsurls.txt

            ( ! ) You can use only -u for single URL or -l for .JS file URLs, Not both
            ( ! ) This tool has been received the last 3 updates at once

 ( 1 )  ::  rest/admin
 ( 2 )  ::  application-configuration
 ( 3 )  ::  rest/web3
 ( 4 )  ::  nftUnlocked
 ( 5 )  ::  nftMintListen
 ( 6 )  ::  submitKey
 ( 7 )  ::  walletNFTVerify
 ( 8 )  ::  walletExploitAddress
 ( 9 )  ::  rest/admin/application-configuration
 ( 10 )  ::  api/Users
 ( 11 )  ::  rest/user/authentication-details/
 ( 12 )  ::  rest/user/login
 ( 13 )  ::  rest/user/reset-password
 ( 14 )  ::  rest/user/whoami
 ( 15 )  ::  rest/saveLoginIp
 ( 16 )  ::  rest/deluxe-membership
 ( 17 )  ::  login
 ( 18 )  ::  api/BasketItems
 ( 19 )  ::  address/select
 ( 20 )  ::  rest/track-order
 ( 21 )  ::  api/Feedbacks
 ( 22 )  ::  rest/captcha
 ( 23 )  ::  160
 ( 24 )  ::  api/SecurityAnswers
 ( 25 )  ::  api/SecurityQuestions
 ( 26 )  ::  20
 ( 27 )  ::  40
 ( 28 )  ::  rest/products
 ( 29 )  ::  reviews
 ( 30 )  ::  api/Products
 ( 31 )  ::  api/Quantitys
 ( 32 )  ::  search
 ( 33 )  ::  2fa/enter
 ( 34 )  ::  forgot-password
 ( 35 )  ::  register
 ( 36 )  ::  api/Complaints
 ( 37 )  ::  file-upload
 ( 38 )  ::  rest/chatbot
 ( 39 )  ::  status
 ( 40 )  ::  respond
 ( 41 )  ::  api/Recycles
 ( 42 )  ::  api/Addresss
 ( 43 )  ::  address/edit/
 ( 44 )  ::  delivery-method
 ( 45 )  ::  address/create
 ( 46 )  ::  api/Challenges
 ( 47 )  ::  rest/repeat-notification
 ( 48 )  ::  rest/continue-code
 ( 49 )  ::  rest/continue-code-findIt
 ( 50 )  ::  rest/continue-code-fixIt
 ( 51 )  ::  rest/continue-code/apply/
 ( 52 )  ::  rest/continue-code-findIt/apply/
 ( 53 )  ::  rest/continue-code-fixIt/apply/
 ( 54 )  ::  snippets
 ( 55 )  ::  snippets/fixes
 ( 56 )  ::  snippets/verdict
 ( 57 )  ::  score-board-preview
 ( 58 )  ::  rest/image-captcha/
 ( 59 )  ::  rest/user
 ( 60 )  ::  erasure-request
 ( 61 )  ::  data-export
 ( 62 )  ::  rest/wallet/balance
 ( 63 )  ::  api/Deliverys
 ( 64 )  ::  api/Cards
 ( 65 )  ::  16
 ( 66 )  ::  10
 ( 67 )  ::  wallet
 ( 68 )  ::  deluxe-membership
 ( 69 )  ::  order-summary
 ( 70 )  ::  rest/order-history
 ( 71 )  ::  orders
 ( 72 )  ::  track-result/new
 ( 73 )  ::  order-completion
 ( 74 )  ::  payment
 ( 75 )  ::  track-result
 ( 76 )  ::  rest/memories
 ( 77 )  ::  score-board
 ( 78 )  ::  application-version
 ( 79 )  ::  profile
 ( 80 )  ::  dataerasure
 ( 81 )  ::  accounting
 ( 82 )  ::  basket
 ( 83 )  ::  order-history
 ( 84 )  ::  recycle
 ( 85 )  ::  address/saved
 ( 86 )  ::  saved-payment-methods
 ( 87 )  ::  rest/country-mapping
 ( 88 )  ::  contact
 ( 89 )  ::  complain
 ( 90 )  ::  chatbot
 ( 91 )  ::  about
 ( 92 )  ::  photo-wall
 ( 93 )  ::  assets/i18n/
 ( 94 )  ::  engine.io
 ( 95 )  ::  socket.io

github.com


2.3 シークレット情報を検出する

SecretFinder

SecretFinder は、LinkFinder を元に作られたツールで、JavaScript のファイル内にある API Key や Access Token 、認証情報などの機微な情報を検出することができます。

$ python3 SecretFinder.py -i https://<Domain> -e -o cli

github.com


jsluice

jsluice は、JavaScript ファイルからシークレットな情報も検出することができます。

$ jsluice secrets https://<Domain>/<Path>/<JS-file> | jq

github.com


Mantra

Mantra は、JavaScript ファイルや HTML ファイルから API Key を検出することができます。

$ echo "https://<Domain>/<Path>/<JS-file>" | Mantra

github.com


trufflehog

trufflehog は、様々なファイルなどから認証情報を検出することができます。

trufflehog では、事前に JavaScript ファイルをローカルにダウンロードしておく必要があります。

$ trufflehog filesystem <JS-file>

github.com

また、trufflehog はブラウザの拡張機能が存在するため、これをインストールして有効化しておくと、自動で検出してくれます。

addons.mozilla.org

chrome.google.com


2.4 潜在的脆弱性情報を検出する

Retire.js

Retire.js は、脆弱性のある JavaScript のライブラリを検出することができます。

github.com

retire.js はブラウザの拡張機能が存在するため、これをインストールして有効化しておくと、自動で検出してくれます。

addons.mozilla.org

chrome.google.com


ESLint

ESLint は、JavaScript のファイルに対して静的解析を行うツールで、最新のフレームワークにもカスタムセキュリティルールで対応して解析することができます。

$ eslint <JS-directory>

また、プラグインを活用して、様々な観点で静的解析を行うことも可能です。(以下は例)

例) セキュリティのプラグインを活用して ESLint で静的解析する場合

$ eslint --no-eslintrc -c ~/ESLint/security/.eslintrc.json -f html -o result_eslint-security.html <JS-directory>

github.com


3. 動的解析 (Dynamic Analysis)

Web アプリケーション上にある JavaScript を動的解析する場合は、主にブラウザに搭載されている開発者ツール「DevTools」を用いて行います。

今回は、Chrome の DevTools を用いて簡単に紹介します。

developer.chrome.com

DevTools

Debug

DevTools にある「デバッグ機能」は、特定の条件下で指定した関数にブレークポイントを設定することができます。

ブレークポイント(Breakpoint)とは、プログラムの実行を任意の場所で一時停止して、停止した箇所の変数の状態や関数の呼び出し経路(コールスタック)を確認したり、停止した箇所からコードの実行を一つずつ任意で進めながら、実行の流れを確認したりすることができます。

例えば、「postMessageワイルドカード(*)としてターゲットオリジンに使用されている」という条件でブレークポイントを設定します。

その場合は、「debug()」で以下のようなコードを、DevTools の Console タブから実行します。

debug(postMessage, 'arguments[1] == "*"')

実行後は、Web ページをリロードした際に条件に当てはまる関数が見つかると、自動でブレークポイントが動作して確認することができます。

また、「debug()」以外にも DOM のイベントにブレークポイントを設定する場合は、「monitorEvents()」を利用します。

monitorEvents()」は、要素とイベントを指定することで、その要素に対するイベントの発生を監視することができます。

monitorEvents(window, 'message')


これらのように、特定のメソッドやイベントなどを動的に追って解析したい場合は、デバッグ機能を有効的に活用すると良いと思います。

特に、特定の脆弱性が発生しやすいメソッドやイベント、シンクやソースなどに注目したい場合に有効的な調査することができます。

www.yeswehack.com

www.yeswehack.com

labs.detectify.com

developer.chrome.com


Memory

DevTools にある「メモリ機能」は、ブラウザに読み込まれた Web ページ全体の実行時間やメモリ使用量などの情報を収集することができます。

主に「Heap snapshot」を利用することで、スナップショットを取得して Web アプリケーションの JavaScript ファイル内のエンドポイントやシークレット情報を列挙することができます。

利用方法

  1. DevTools から Memory タブを開く
  2. Select profiling type から「Heap snapshot」を選択して、「Take snapshot」をからスナップショットを取得する
  3. スナップショットが完了したら、検索バー(ctrl+f)を開く
  4. ここで検索する条件を指定することで、条件のもとにエンドポイントや特定の文字列を列挙することができます。(例: /api)


Network

DevTools にある「ネットワーク機能」は、ブラウザに読み込まれた Web ページ全体のファイルを収集することができます。

Network タブから、主にフィルターで JavaScript ファイルのみに抽出したり、JavaScript ファイル内にある特定の関数を列挙することもできます。(例: innerHTML)


Lighthouse

DevTools にある「パフォーマンス測定機能」は、ブラウザに読み込まれた Web ページ全体のセキュリティ問題を検出することができます。

例として、主に以下のような点をベストプラクティスとして検出してくれます。

利用方法

  1. DevTools から Lighthouse タブを開く
  2. Device を「Desktop」を選択して、Categoriesを「Best practices」を選択する
  3. 「Analyze page load」で測定する
  4. 測定が完了したら、読み込まれたページに関する情報が閲覧できる

developer.chrome.com


おすすめ動画

  • Hacker101 - JavaScript for Hackers (Created by @STOKfredrik)

www.youtube.com

  • Improve Your Hacking Skills Using Devtools | Bug Bounty Tips

www.youtube.com

www.youtube.com


4. その他

JS Analyze に使える Burp の機能

Copy URLs

Burp Suite を利用して Web アプリケーションをある程度クロールした後に、デフォルトの機能である Proxy タブから JavaScript ファイルの URL を列挙することができます。

  1. Proxy タブの HTTP history タブを開く
  2. Filter setting にある「Filter by file extension」の「Show only」をチェックして、欄に「js」を指定して、Apply から設定します。

  3. HTTP history タブのリクエストが JavaScript のファイルのみになった後に、リクエストを全て選択して、右クリックして「Copy URLs」から URL をコピーします。

  4. コピーした URL リストをローカルのテキストにペーストして保存します。

    $ cat urls.txt          
    http://localhost/103.js
    http://localhost/103.js
    http://localhost/103.js
    http://localhost/main.js
    http://localhost/vendor.js
    http://localhost/runtime.js
    http://localhost/polyfills.js
    http://localhost/vendor.js
    http://localhost/vendor.js
    http://localhost/main.js
    http://localhost/main.js
    http://localhost/polyfills.js
    http://localhost/polyfills.js
    http://localhost/runtime.js
    http://localhost/runtime.js
    http://localhost/vendor.js
    http://localhost/main.js
    http://localhost/runtime.js
    http://localhost/polyfills.js
    
  5. コピーしたままでは、重複した URL がそのままあるため、sort コマンドで並び替えと重複を排除して、ツールによる静的解析ができる JavaScript ファイルの URL 一覧を作成します。(完成)

$ cat urls.txt | sort -u > urls-js.txt

$ cat urls-js.txt 
http://localhost/103.js
http://localhost/main.js
http://localhost/polyfills.js
http://localhost/runtime.js
http://localhost/vendor.js


DOM Invader

DOM Invader は、Burp の内蔵ブラウザで利用できる機能で、DOM を解析して JavaScript のソースとシンクをツリービューで表示することができます。

また、DOM Based の Reflected XSS や Prototype Pollution などの脆弱性を検証することもできます。

  1. Proxy タブの Intercept タブを開く
  2. 「Open browser」から Burp の内蔵ブラウザを開く
  3. 右上のブラウザの拡張機能にある「DOM Invader」から「DOM Invader is on」を有効にする
  4. Devtools から「DOM Invader タブ」を開いて確認することができる

portswigger.net

portswigger.net


Find scripts (Pro)

Find scripts は、Burp Suite の Professional 版でのみ利用することができる機能で、JavaScript ファイルの全てのスクリプトをエクスポートすることができます。

方法としては、 Target タブにある Site map から特定のドメインを指定して、Engagement tools にある Find scripts を利用することで、そのドメインにある全ての JavaScript のファイルを一括でダウンロード(Export)することが可能です。

portswigger.net


JS Link Finder は、Burp Suite の Professional 版でのみ利用することができる拡張機能で、クロールしたレスポンスから JavaScript ファイルを自動でスキャンして、JavaScript ファイルの URL とエンドポイントを Burp JS LinkFinde タブから表示することができます。

また、Dashboard タブにある Issue activity 欄にも随時検出したエンドポイントを表示してくれます。

portswigger.net


[Ex] JS Miner (Pro)

JS Miner は、Burp Suite の Professional 版でのみ利用することができる拡張機能で、クロールで見つかった静的ファイルから認証情報やサブドメイン、エンドポイントなどを自動で検出することができます。

主に JavaScript ファイルや JSON ファイルなどの静的ファイル内を解析して、検出したら Dashboard タブにある Issue activity 欄に随時表示してくれます。

portswigger.net


[Ex] Retire.js (Pro)

Retire.js は、Burp Suite の Professional 版でのみ利用することができる拡張機能で、クロールで見つかった JavaScript ファイルから使われているライブラリやフレームワークに存在する潜在的脆弱性を自動で検出することができます。

検出されたら、 Dashboard タブにある Issue activity 欄に随時表示してくれます。

portswigger.net


keyhacks・secrets-patterns-db

keyhacks は、漏洩して取得した API Key が有効なものがどうかを簡単にチェックする方法を示すリポジトリ(ドキュメント)です。

もし、取得した API Key があれば、ここから有効性を確認して、詳細は各 API の公式ドキュメントを確認するようにしてください。

github.com

また、secrets-patterns-db は、API Key やトークンなどの機微な情報に関する内容を、正規表現でまとめたリポジトリ(ドキュメント)です。

これを参考に、jsluice などで独自の Config を作成して、JavaScript のファイルからシークレット情報を検出できるようにすると、良いと思います。

github.com


JavaScript の難読化・軽量化

取得した JavaScript ファイルが難読化(Obfuscation)や軽量化(Minify)されている場合があります。

そのままでは、コードが読みにくい状態のため、js-beautify やオンラインの beautifier.io などを活用すると良いと思います。

github.com

github.com

また、React などで生成されるソースマップファイル(.map)で、ソースコードの最後の方に「sourceMappingURL」としてファイル名が記載されている場合があります。(以下、例)

//#sourceMappingURL=main.2b0f621f.chunk.js.map

ソースマップファイルを直接ダウンロードしたり、「unwebpack-sourcemap」などを用いることで、簡単にフロントエンドのコードをダウンロードすることができます。

github.com

github.com

github.com

ちなみに、ソースマップファイルを ffuf などを用いてファジングで探す場合もあります。(以下、例)

$ ffuf -w js_files_path.txt -u https://<Domain>/FUZZ -mr "sourceMappingURL"


バグバウンティ入門(始め方)

バグバウンティの始め方については、以下のブログで紹介しているため、よければこちらもご覧ください。

scgajge12.hatenablog.com


参考ドキュメント

kathanp19.medium.com

anithaana3.medium.com

medium.com

infosecwriteups.com

gowthams.gitbook.io

medium.com

bitthebyte.medium.com

book.hacktricks.xyz


5. 終わりに

本稿では、バグバウンティなどの脆弱性調査で行う、JavaScript の静的解析と動的解析についてまとめて紹介しました。

ぜひ、好みのツールを使って JavaScript ファイルの解析したり、対象の情報収集などをしてみてください。

ここまでお読みいただきありがとうございました。