ゆったりWeb手帳

node-sassで"Arbitrary File Overwrite"が出る

audit コマンドで high severity vulnerability が出る

久々にnode-sassを使おうと思ったらauditでつまづいた。

問題

npm i -D node-sassしたら以下の警告が出た

found 1 high severity vulnerability
  run `npm audit fix` to fix them, or `npm audit` for details

早速 npm audit を行うと、以下のようになる。

                       === npm audit security report ===

┌──────────────────────────────────────────────────────────────────────────────┐
│                                Manual Review                                 │
│            Some vulnerabilities require your attention to resolve            │
│                                                                              │
│         Visit https://go.npm.me/audit-guide for additional guidance          │
└──────────────────────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Arbitrary File Overwrite                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ tar                                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.4.2                                                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-sass [dev]                                              │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-sass > node-gyp > tar                                   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/803                             │
└───────────────┴──────────────────────────────────────────────────────────────┘
found 1 high severity vulnerability in 8468 scanned packages
  1 vulnerability requires manual review. See the full report for details.

これは node-tar の4.4.2より前のバージョンは任意ファイルの上書きに関して脆弱性があるとのこと。

修正

原因はnode-gypにあります。node-gyp@4.x.xにアップデートする必要があります。

package-lock.jsonを修正します。

node-gypの項目を探し、requires以下のtarの項目を削除し、dependenciestarを追加します。

package-lock.json
  "node-gyp": {
    "version": "3.8.0",
    "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
    "integrity": "sha512-3g8l...",
    "dev": true,
    "requires": {
      "fstream": "^1.0.0",
      "glob": "^7.0.3",
      "graceful-fs": "^4.1.2",
      "mkdirp": "^0.5.0",
      "nopt": "2 || 3",
      "npmlog": "0 || 1 || 2 || 3 || 4",
      "osenv": "0",
      "request": "^2.87.0",
      "rimraf": "2",
      "semver": "~5.3.0",
-     "tar": "^2.0.0",      "which": "1"
    },
    "dependencies": {
      "semver": {
        "version": "5.3.0",
        "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
        "integrity": "sha1-myzl...",
        "dev": true
-     }+     },  +     "tar": {+       "version": "^4.4.2"+     }    }
  },

修正後、node_modulesを削除しnpm iを実行します。