テクノロジー

PostgreSQLにあるSQLインジェクションの脆弱性が9年以上発見されずアメリカ財務省への侵入に使用されてしまう

1: kamm 2025/03/18 15:05

怖すぎ

2: Goldenduck 2025/03/18 15:19

十分な目があれば安全が確保できるというのがオープンソースというものだが、誰かが見てるからヨシの現場猫精神でフリーライドしまくってるのであまりあてにならない

3: suikyojin 2025/03/18 15:46

「誰かがチェックしているはず」は、皆がそう思うと、誰もチェックしないことになる。共同責任は共同無責任となる。粗探しの目もセキュリティの観点からは必要ということ。

4: fashi 2025/03/18 16:02

PHPの脆弱性では?と思ったらlibpqの脆弱性

5: Sampo 2025/03/18 16:03

UTF-8デコードが寛容すぎたのね。本来は同じ文字を複数のバイト表現で表記できてしまうのを避ける仕様があるんだけどバリデーションが弱くて「'」に別表現が可能になっていたと。これはそう簡単には気付けないですわ

6: hamamuratakuo 2025/03/18 16:27

"ただの「'」はエスケープ処理が入るものの、先頭にビットを追加して2バイト文字にするとエスケープ処理をスキップできてしまっていたというわけです。"

7: koyhoge 2025/03/18 16:50

PDOの場合はどうだろうと調べたら、pdo_pgsqlはPQescapeStringConn()を呼び出しており、これが内部でPQescapeStringInternal()呼んでいるので、libpqをアップデートしないと影響がある。

8: versatile 2025/03/18 17:48

なんつー原始的なバグだ

9: otation 2025/03/18 18:05

psql経由で流した時の脆弱性ってことかな。先頭ビットを変えるだけでいいなら、世の中のシステムの大半に脆弱性がありそうだけど

10: n2sz 2025/03/18 18:06

ポスグレレベルでもこんな障害残ってるんだなあ

11: hogetax 2025/03/18 18:29

ん?PHPとPostgreSQLのどっちに問題があったんだ?...ぶこめサンキュ♡

12: earu 2025/03/18 18:45

アメリカ財務省のシステムがPHPなのが意外。バグはlibpqのものみたいだからLL言語系は割と対象になるのかな?

13: poliphilus 2025/03/18 18:49

ほおー 0xC027… よー考えるな。

14: lainof 2025/03/18 19:10

古いシステムなのか?今はエスケープしてSQLを組み立てようとはしないよね?PHPは違うの?

15: KoshianX 2025/03/18 19:28

えーこんなのあったのか。PQescapeStringInternal の問題で主に `src/interfaces/libpq/fe-exec.c` の修正で対応した模様。PHP側もそこは信頼して使ってたんだろうなあ

16: mohno 2025/03/18 20:02

サニタイズ?

17: okinawazenzai 2025/03/18 20:04

こういうのあるから、やっぱりO/Rマッパー使った方が良いんかなーって思っちゃう。バインド変数になるだろうし、というかこの手のPHPプログラム結構残ってそうだよね。4とか5あたりなんだろうか?

18: at_yasu 2025/03/18 20:45

ありゃま

19: raitu 2025/03/18 22:19

“攻撃者はSQLインジェクションによってPostgreSQLに付属する対話型インターフェースであるpsqlを自由に使用できるようになり、データベースへのアクセスだけでなくpsqlを経由して任意のシステムコマンドを入力可能に”

20: wkwkhautbois 2025/03/18 23:13

静的プレースホルダー(PreparedStatement)なら先に実行計画立てるからSQL Injectionは原理的に大丈夫 と思ってるんだけど、なんか気持ちは怖くなるね

21: circled 2025/03/19 01:24

脆弱性見つけても報告面倒だからしないってのもありなわけで、下手すると墓場まで持ってくかも知れない。bashのシェルショックの時も、これ一体どれだけ昔からあったんだ?と思ったし

22: hatebu_admin 2025/03/19 02:03

プレースホルダを使えとIPAの安全なウェブサイトの作り方にも書いてある https://www.ipa.go.jp/security/vuln/websecurity/sql.html

23: FreeCatWork 2025/03/19 03:27

9年以上も… 見つからなかったなんて! びっくりにゃ!

24: defiant 2025/03/19 04:06

この記事をおすすめしました

25: prograti 2025/03/19 07:12
26: hom_functor 2025/03/19 09:53

UTF-8の冗長性に起因するよくあるチェック漏れ。エスケープはたとえ公式提供でも筋悪だな

27: xlc 2025/03/19 10:16

SQLインジェクションってアプリ側の問題では?と思ったらエスケープ用の関数にバグがあったという話?できる限りプレースホルダーを使おう。

28: nippondanji 2025/03/19 10:17

巨大なソフトウェアはデバッグ大変なんだよ。

29: kadzuya 2025/03/19 10:24

エスケープが信頼できないの分かる。でもクライアントサイドでprepared statementを実装してるライブラリたちも信用できない…

30: deep_one 2025/03/19 10:38

たいていのセキュリティー対策文書では「サニタイズはやばいからプレースホルダを使いなさい」と言われている。/UTFがらみか。ややこしいからな。

31: mas-higa 2025/03/19 14:07

アプリの SQL injection は警戒するけど、DBMS 側は盲点だな。MBCS に不慣れな人が Unicode 対応のコード書くの怖い。