Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
Search
convto
June 18, 2024
3
360
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
convto
June 18, 2024
Tweet
Share
More Decks by convto
See All by convto
gob バイナリが Go バージョンによって 出力が変わることについて調べてみた / Investigating How gob Binary Output Changes Across Go Versions
convto
0
78
バイナリを眺めてわかる gob encoding の仕様と性質、適切な使い方 / understanding gob encoding
convto
6
2.3k
みんなでたのしむ math/big / i love math big
convto
0
220
Go1.22からの疑似乱数生成器について/go-122-pseudo-random-generator
convto
2
580
Go1.20からサポートされるtree構造のerrの紹介と、treeを考慮した複数マッチができるライブラリを作った話/introduction of tree structure err added since go 1_20
convto
0
970
byte列のbit表現を得るencodingライブラリ作った
convto
1
1.1k
Go runtimeの歩き方/how to follow go runtime function
convto
1
930
入出金ドメインの苦労話と解決へのアプローチ/funds in/out difficulties and solutions
convto
2
1.3k
rsa_understanding_memo
convto
0
580
Featured
See All Featured
Done Done
chrislema
182
16k
Agile that works and the tools we love
rasmusluckow
328
21k
The Cult of Friendly URLs
andyhume
78
6.1k
How to train your dragon (web standard)
notwaldorf
88
5.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Thoughts on Productivity
jonyablonski
68
4.4k
Making the Leap to Tech Lead
cromwellryan
133
9k
Fireside Chat
paigeccino
34
3.1k
Music & Morning Musume
bryan
46
6.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Transcript
Go 関連の個人的おもしろCVE 5選 2024/06/18 Go Bash !
自己紹介 @convto 株式会社LayerX所属 レイヤ低めの技術などに興味がありま す (読みはこんぶとです)
はなすこと - Go の脆弱性情報を調べたいとき - おもしろ CVE 紹介 - 脆弱性をみつけたら
- まとめ
Go の脆弱性情報を調べたいとき
脆弱性を調べてなにがうれしいの? - どういう問題がおきてどう修正されているか知れる - ふだんの業務に生きてくる知見もあったりする - どういう傾向の脆弱性が報告されているか雰囲気を掴める - ネットワークとか外界との接点はやっぱ多いな〜とか -
そのへんは自分でも気をつけよ!となったり
その1 メーリスに入る - https://groups.google.com/g/golang-announce にリリース情報が 流れてくる - `[security]` prefix がついてるのが脆弱性の対応リリース
その1 メーリスに入る 最近のだけでもわりとある
その2 レポートページを見る - https://pkg.go.dev/vuln/list に Vulnerability Reports がある - Go
本体, std packages だけじゃなくてよく使われる OSS についての脆 弱性も整理されてる
その2 レポートページを見る
go vuln 管理の全体像はこんなかんじ https://go.dev/doc/security/vuln/
go vuln 管理の全体像はこんなかんじ https://go.dev/doc/security/vuln/ じつは API もある
その3 API たたく - Go Security Team が管理してる vuln database
は API もある - かんたんなドキュメントとかは https://go.dev/doc/security/vuln/database
その3 API たたく
その3 API たたく
おもしろ CVE 紹介
CVE-2021-3538 - https://github.com/satori/go.uuid に見つかった脆弱性 - 当時よく使われていたライブラリなので対応した方も多いのでは - だいぶ昔のものなんですが好きなので紹介します
CVE-2021-3538 どういうやつ
CVE-2021-3538 どういうやつ
CVE-2021-3538 どういうやつ version, variant のぞくと 先頭2byteしかrand読めてない
CVE-2021-3538 修正CL
CVE-2021-3538 修正CL ReadFull つけてまわっただけ Read は大体指定byteを読み切るこ とを保証してない
CVE-2021-3538 余談 - じつはいまは crypto/rand#Read 側にいい感じの対応が入ってるの で、unix 環境ならそれを使ってる限りは発生しない - Go
1.19 くらいのときぜんぜん違う文脈のパッチ入れるついでに追加して た https://go-review.googlesource.com/c/go/+/390038
CVE-2021-3538 余談
CVE-2021-3538 感想 - 報告された issue の例にめちゃめちゃ圧があった - uuid v4 が衝突したら大抵
rand source から引っ張るところがバグって るので気をつけよう - 後追いでしれっといい感じの対応が入っていていい話だった
CVE-2024-24786 - google.golang.org/protobuf/encoding/protojson に見つかった脆 弱性 - 特定ケースの invalid JSON を
Unmarshal しようとすると無限ループ になる - `google.protobuf.Any` を含むメッセージ、または `UnmarshalOptions.DiscardUnknown` が指定されていると発生
CVE-2024-24786 どういうやつ test の CL がわかりやすい
CVE-2024-24786 修正CL
CVE-2024-24786 感想 - encoding 系はこういう CPU リソースを想定外に使っちゃうのがちょい ちょいある - 修正はかなり簡単ぽかった
こういう問題は修正より発見が難しそう
CVE-2022-32189 - math/big の脆弱性 - 前提として標準パッケージの独自の型などは GobEncoder/GobDecoder interface を実装していることがおおい -
bit#Float, big#Rat で特定の入力を GobDecode に食わせると panic がおきる挙動になっていたbit#Float, big#Rat で特定ケースで panic になる入力を作れた
CVE-2022-32189 どういうやつ CL の test みるとわかりやすい 想定より短いバイト列がきたとき panic が返ってきちゃってた
CVE-2022-32189 どういうやつ - 正常に GobEncode されたやつは少なくとも持っている値がいくつかある - version, sign などの情報とか
- big#Float は 6byte, big#Rat は 5byte 情報が少なくとも必要 - GobDecode の実装で, len check せずにそれらの情報がある前提で アクセスしていた
CVE-2022-32189 修正CL (big#Rat)
CVE-2022-32189 感想 - math/big は結構好きで, 過去の問題とか眺めてたら発見した - 正常に encode されてない期待しない入力を食べたときも
error をちゃ んと返す必要があるのは気をつけよう - 悪意のある外部入力で panic を狙えるのは可用性に影響がでる可 能性がある - ぼくらが書くソフトウェアでも同じ注意が必要
CVE-2024-24788 - net package の脆弱性 - DNS response が不正な形式のとき無限ループに陥る可能性がある -
ぼくは DNS client の具体的な実装に詳しいわけではないが、CLをみる とアカンねと言うのが一発でわかり面白かったので紹介
CVE-2024-24788 修正CL
CVE-2024-24788 感想 - エラーハンドリングもれだしめっちゃ悪いことはしてないのにCVEついてて なるほどとなった - コンピューティングリソースを過度に消費する可能性があり可用性に 影響あたえうる - こういうコード全然書いちゃうことあるので気をつけましょう
CVE-2020-26160 - だいぶ昔のやつ - https://github.com/dgrijalva/jwt-go の脆弱性 - aud に配列がくることは jwt
の仕様で許可されている - しかし実際 aud を配列で渡されると中身を取り出せず, また自身が含ま れるかの検証もスキップされてしまっていた
CVE-2020-26160 修正CL (抜粋)
CVE-2020-26160 修正CL (抜粋)
CVE-2020-26160 感想 - 仕様として valid な一部の形式を食ったときの挙動が壊れてた - unset を許容するかどうかを制御できる, けど渡されときはちゃんと見る,
みたいなデザインなのでそもそもちょっと難しい - validation logic とかは柔軟になりがちなので気をつけよう
脆弱性をみつけたら
どういう挙動が脆弱性ありと評価されるの? - ざっくり機密性、完全性、可用性に影響を与えるもの - よくある具体例 - 任意の入力で panic させられる -
必要以上にコンピューティングリソースを消費させられる - 見せちゃいけないものが見られちゃう - 期待する乱数が取れない
Go には脆弱性報告窓口があるよ - Go 標準/準標準パッケージなどについては security\@golang.org に 報告する - その他のソフトウェアの場合メンテナが指定している窓口に報告!
まとめ
まとめ - Go は関連する脆弱性の情報がよくまとめられている - いくつか脆弱性の具体例を紹介しました - 専門的な知識がなくても発見できそうなものもある! - 脆弱性を発見したら適切な窓口に報告しよう!
まとめ - Go は関連する脆弱性の情報がよくまとめられている - いくつか脆弱性の具体例を紹介しました - 専門的な知識がなくても発見できそうなものもある! - 脆弱性を発見したら適切な窓口に報告しよう!
- この発表きっかけの CVE 発見者が出現したらご飯を奢ります
宣伝
layerx.go #1 やります! https://layerx.connpass.com/event/319314/
layerx.go #1 やります! https://layerx.connpass.com/event/319314/
超おまけ
Go Conference 2024 のアンケートだそう!
Go Conference 2024 のアンケートだそう!
ご清聴ありがとうございました