node.jsのnormalizeを試したメモ

IT

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すら手こずりました。

検証らしい結果にならなかったので記事にしなくてもいいかなと思いましたが、せっかくなので記事にしました。

コメント

タイトルとURLをコピーしました