Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
正規表現のReDoS脆弱性を判定するVSCode拡張機能
Search
Ran350
May 13, 2024
Programming
450
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
正規表現のReDoS脆弱性を判定するVSCode拡張機能
Ran350
May 13, 2024
More Decks by Ran350
See All by Ran350
2038年問題が思ったよりヤバい。検出ツールを作って脅威性評価してみた論文 | Kansai Open Forum 2024
ran350
8
6k
UNIXよ2038年を越えてゆけ
ran350
6
130k
2038年問題の原因となりうるソースコードの自動検出手法の提案と実装 | 研究室 全体ゼミ発表
ran350
0
1.3k
Other Decks in Programming
See All in Programming
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.2k
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
240
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
160
Building an Out-of-Order CPU
latte72
1
770
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
110
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
620
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
680
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
310
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
210
Featured
See All Featured
HDC tutorial
michielstock
2
870
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
900
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
650
GraphQLとの向き合い方2022年版
quramy
50
15k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Discover your Explorer Soul
emna__ayadi
2
1.3k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Unsuck your backbone
ammeep
672
58k
Transcript
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 正規表現の
脆弱性を判定する VSCode拡張機能 1
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 自己紹介 @hoshina350 らん Ran350 https://ran350.github.io/ Webフロントエンド勉強中 自己紹介 2
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 3 正規表現とは 正規表現ってなんや!! 正規表現とは
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 4 正規表現とは 様々な文字列を一つの文字列で表現する表記法
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 5 ???どゆこと
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 6 使い道 入力文字列が条件を満たすかを判定するときによく使う
^[a-zA-Z0-9]+$ 入力文字列が全角半角英数字かを判定したいとき 例
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 7 基本3演算 連接,選択,繰り返し
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 8 連接 rというパターンの直後にeというパターンが続く
例 「re」
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 9 選択 rits
または univ というパターンを表す 例 (rits)|(univ) どちらか一方にマッチするかをみる
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 10 繰り返し r
または rr または rrr または rrrr … にマッチする 例 「r+」 直前のパターンが繰り返されていることを表現
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 11 使ってみる JavaScriptでの例
例題 入力文字が”Rits”かを判定する ただし,”t”は何文字でも良い const regex = /Rit+s/; regex.test( “Ritttts” ); true
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 12 めっちゃ便利やん!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 13 でも実は…
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 14 ReDoS脆弱性 ReDoS脆弱性 使い方を間違うと危険!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 15 ReDoS脆弱性とは ReDoS
(Regular Expressions DoS) 評価に非常に長い時間が必要になる正規表現の脆弱性
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 16 脆弱な表現例 (a+)+b
(a|.)+ abc.+def.+
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 17 実験してみる すぐに実行完了する
const regex = /(a|.)+b/; regex.test( “a”.repeat(20) ); 20文字の”a”に対するマッチング
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 18 実験してみる const
regex = /(a|.)+b/; regex.test( “a”.repeat(30) ); ……15秒で実行完了した 30文字の”a”に対するマッチング
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 19 実験してみる …………………
実行が終わらん const regex = /(a|.)+b/; regex.test( “a”.repeat(40) ); 40文字の”a”に対するマッチング
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 20 処理時間が指数関数的に増加
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 21 やばいやん
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 22 事例 事例 サービスへの影響は?
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 23 事例 •
2016年,Stack Overflowのサーバが ReDoS脆弱性が原因でダウン https://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016 • 2019年,Cloudflareが提供する全世界のCDNが, ReDoS脆弱性が原因でダウン https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/ など
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 24 原因 原因 なんで起こるん
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 25 原因 バックトラックが指数関数的に増加してしまうこと
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 26 原因 「(a|.)*」の例では,状態遷移の仕方が一通りに定まらない場合がある
→ 分岐が多くなり2^n通りの比較が必要に
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 27 脆弱な正規表現の具体的な特徴は?
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 28 脆弱な表現① 量指定子がネストされている
• (a*)*b • (a+)+b • (a*){9}
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 29 脆弱な表現② 選択の両方にサブマッチし得るパターンが繰り返されている
• (.|¥w)* • (a|aa)*
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 30 脆弱な表現③ 繰り返し表現が連結している
• (a|b)*(a|c)*d • .*.*d • abc.*def.*
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 31 対策 対策 脆弱な表現を生まないためには?
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 32 対策 脆弱な表現①②③を避ける!
以上!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 33 せやけど
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 34 対策 世の中の正規表現はしばしば複雑
(?:(?:¥"|'|¥]|¥}|¥¥|¥d|(?:nan|infinity|true|false|null|undefined|symbol|math)|¥`|¥-|¥+)+[)]*;?((?:¥s|-|~|!|{}|¥|¥||¥+)*.*(?:.*=.*)))
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 35 対策 人間の目で脆弱性判定するのは困難
プログラムに判定してもらうほうが適切
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 36 開発環境で脆弱性判定できたらええなぁ もっと言うと…
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 37 探してみたけど...ないなぁ
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 38 つくるか
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 39 VSCode拡張機能 VSCode拡張機能 つくった!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 40 概要 正規表現の脆弱性判定ができる
VScode 拡張機能 ソースコード: https://github.com/Ran350/redos-checker-for-vscode 内部で脆弱性判定ライブラリ recheck を呼び出している https://github.com/MakeNowJust-Labo/recheck
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 41 使い方 1.
脆弱性判定したい正規表現をカーソル選択する 2. 右クリックメニュー or コマンドパレットから拡張機能を実行 3. 判定結果が表示される
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 42 デモ 実演
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 43 機能構成 選択範囲を取得
const editor = vscode.window.activeTextEditor; const document = editor.document; const selectedArea = editor.selection; const regex = document.getText(selectedArea); 脆弱性判定 const result = check(regex, ""); vscode.window.showWarningMessage("vulnerable.", "More"); ステータス出力
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 44 展望 •
誰でも利用できるようにパッケージ化したい ◦ 現在はデバッグモードでの利用 • 脆弱性判定を自前実装したい
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 45 まとめ •
正規表現は 文字列処理でめっちゃ便利 • でも,脆弱な表現では 処理が終わらなくなる危険性もある! • 対策方法の1つとして,脆弱性判定ができるエディタ拡張機能をつくった