Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go 関連の個人的おもしろCVE 5選 / my favorite go cve

convto
June 18, 2024
360

Go 関連の個人的おもしろCVE 5選 / my favorite go cve

convto

June 18, 2024
Tweet

More Decks by convto

Transcript

  1. その2 レポートページを見る - https://pkg.go.dev/vuln/list に Vulnerability Reports がある - Go

    本体, std packages だけじゃなくてよく使われる OSS についての脆 弱性も整理されてる
  2. その3 API たたく - Go Security Team が管理してる vuln database

    は API もある - かんたんなドキュメントとかは https://go.dev/doc/security/vuln/database
  3. CVE-2021-3538 余談 - じつはいまは crypto/rand#Read 側にいい感じの対応が入ってるの で、unix 環境ならそれを使ってる限りは発生しない - Go

    1.19 くらいのときぜんぜん違う文脈のパッチ入れるついでに追加して た https://go-review.googlesource.com/c/go/+/390038
  4. CVE-2021-3538 感想 - 報告された issue の例にめちゃめちゃ圧があった - uuid v4 が衝突したら大抵

    rand source から引っ張るところがバグって るので気をつけよう - 後追いでしれっといい感じの対応が入っていていい話だった
  5. CVE-2024-24786 - google.golang.org/protobuf/encoding/protojson に見つかった脆 弱性 - 特定ケースの invalid JSON を

    Unmarshal しようとすると無限ループ になる - `google.protobuf.Any` を含むメッセージ、または `UnmarshalOptions.DiscardUnknown` が指定されていると発生
  6. CVE-2022-32189 - math/big の脆弱性 - 前提として標準パッケージの独自の型などは GobEncoder/GobDecoder interface を実装していることがおおい -

    bit#Float, big#Rat で特定の入力を GobDecode に食わせると panic がおきる挙動になっていたbit#Float, big#Rat で特定ケースで panic になる入力を作れた
  7. CVE-2022-32189 どういうやつ - 正常に GobEncode されたやつは少なくとも持っている値がいくつかある - version, sign などの情報とか

    - big#Float は 6byte, big#Rat は 5byte 情報が少なくとも必要 - GobDecode の実装で, len check せずにそれらの情報がある前提で アクセスしていた
  8. CVE-2022-32189 感想 - math/big は結構好きで, 過去の問題とか眺めてたら発見した - 正常に encode されてない期待しない入力を食べたときも

    error をちゃ んと返す必要があるのは気をつけよう - 悪意のある外部入力で panic を狙えるのは可用性に影響がでる可 能性がある - ぼくらが書くソフトウェアでも同じ注意が必要
  9. CVE-2024-24788 - net package の脆弱性 - DNS response が不正な形式のとき無限ループに陥る可能性がある -

    ぼくは DNS client の具体的な実装に詳しいわけではないが、CLをみる とアカンねと言うのが一発でわかり面白かったので紹介
  10. CVE-2020-26160 - だいぶ昔のやつ - https://github.com/dgrijalva/jwt-go の脆弱性 - aud に配列がくることは jwt

    の仕様で許可されている - しかし実際 aud を配列で渡されると中身を取り出せず, また自身が含ま れるかの検証もスキップされてしまっていた
  11. CVE-2020-26160 感想 - 仕様として valid な一部の形式を食ったときの挙動が壊れてた - unset を許容するかどうかを制御できる, けど渡されときはちゃんと見る,

    みたいなデザインなのでそもそもちょっと難しい - validation logic とかは柔軟になりがちなので気をつけよう
  12. どういう挙動が脆弱性ありと評価されるの? - ざっくり機密性、完全性、可用性に影響を与えるもの - よくある具体例 - 任意の入力で panic させられる -

    必要以上にコンピューティングリソースを消費させられる - 見せちゃいけないものが見られちゃう - 期待する乱数が取れない