

OWASPのCSVインジェクション対象文字、タブと改行(CR)も追加されてた
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
前に書いたCSVインジェクション対策の記事の続き。あの時点では =, +, -, @ の4文字だけ弾いておけばいいと思ってたけど、それだけだと不十分らしい。
きっかけ
SymfonyのCVE-2021-41270を見てて気づいた。SymfonyのCSVエンコーダーは元々、=, +, -, @ で始まるセルにタブ文字(\t)を前置して無害化する実装だったんだけど、そのタブ自体がOWASPの対象文字リストに追加されたことで、前置してたタブが逆に危険文字扱いになってしまったという話。
追加された文字
現状のOWASPのリストは以下の6つになってる。
=+-@- タブ(0x09)
- 改行/CR(0x0D)
タブとCRが増えた正確な時期はOWASP側の記事からは分からなかったけど、少なくとも2021年11月時点のSymfonyのブログではすでにこの前提で書かれている。
対策方法も変わった
タブが危険文字リストに入ったことで、「危険文字始まりのセルにタブを前置する」という以前の対策方法自体が使えなくなった。Symfonyはこれを受けて、前置文字をタブからシングルクォート(')に変更している。
結論
去年書いた4文字ブロックだけだと、タブや改行で始まる値をすり抜けさせてしまう可能性がある。CSVエクスポートのバリデーションは、この6文字を対象に見直した方がよさそう。前置方式を採用するなら、タブではなくシングルクォートを使う。