npmを眺めていたらパストラバーサルの修正にnormalizeを使用したものがあったので動作を見てみました。

CVE-2020-7684 - GitHub Advisory Database
Path traversal in rollup-plugin-serve
ドキュメント
公式
Path | Node.js v20.2.0 Documentation
試した
ソースコード

同じディレクトリに「text.txt」を置いてあるのでそれを見に行きます。

normalize使わないほう。


まぁこんなもんだよなという感じです。
普通に表示できていますが、ファイル読み込みと画面表示の方法がわからなかったのでひたすらに調べていました。
なのでこの時はめっちゃ感動していたりします。
normalize使ったほう。


ドキュメント通りパスが正規化されていました。
これであれば「/home/ubuntu~」から始まっていることを確認できれば変なことは起こらなそうですね。
環境作っていて思いましたが「この方式で作ればパストラバーサルは起こらない」みたいなのは無いんですね。
フレームワークをちゃんと使ってればXSSやSQLインジェクションは起こらないと同じ感じでパストラバーサルもそんな感じかと思いましたがそんなこと無いっぽいです。
(それがあったら単純ミスでCVEになってないか?)
得たこと
- normalizeを使っていると正規化されている。
- 正規化後にパスを検証されているかは確認する必要がある。
- ファイル読み込みはだいたい「readFile」から始まっている。ソースコード探すならこれでgrepすれば良さそう。
終わりに
normalizeのメモでした。
最初はCVEを再現しようとしたのですが、ライブラリの使い方がわからなかったので修正点のみクローズアップしました。
何が一番大変かってnode.jsを普通に使うことです。
hello worldすら手こずりました。
検証らしい結果にならなかったので記事にしなくてもいいかなと思いましたが、せっかくなので記事にしました。
コメント