Closed4

npmのDanfo.jsの「danfojs@1.1.2(最新版)」に、脆弱性のある「xlsx@0.17.2」が入ってたので対処法メモ

ツイーティ・ザ・フォックスツイーティ・ザ・フォックス

JavaScriptでPythonのPandasのようなデータフレームが
扱えるライブラリ「Danfo.js」の紹介記事を読んで興味を持つ
https://zenn.dev/aidemy/articles/c41150aa4bf4c9
 

クライアント側で動く方の「danfojs」を早速試すことにしたが…

npm init
npm install danfojs

重大な脆弱性があるとか出てしまった。

9 packages are looking for funding
  run `npm fund` for details

2 high severity vulnerabilities

To address all issues, run:
  npm audit fix

 

どんな脆弱性があるのか見てみると…
「xlsx@0.17.2(Sheet.JS)」にReDoSの脆弱性があるとのことだった。

npm audit
# npm audit report

xlsx  *
Severity: high
Prototype Pollution in sheetJS - https://github.com/advisories/GHSA-4r6h-8v6p-xvw6
SheetJS Regular Expression Denial of Service (ReDoS) - https://github.com/advisories/GHSA-5pgg-2g8v-p4x9       
fix available via `npm audit fix --force`
Will install danfojs@0.1.1, which is a breaking change
node_modules/xlsx
  danfojs  >=0.1.2
  Depends on vulnerable versions of xlsx
  node_modules/danfojs

2 high severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force
ツイーティ・ザ・フォックスツイーティ・ザ・フォックス

とりあえずnpm audit fixnpm audit fix --forceをしたけど解決せず。
どうすればいいのか検索して見たところ、解決方法が書いてあるサイトを発見!
 

xlsx(Sheet.js)パッケージの脆弱性に対応する方法

「xlsx(Sheet.JS)に脆弱性が修正済みのverはあるけど、諸事情でnpm上にない」
「Sheet.JSのCDNを指定して、npmでinstallする必要がありますよ」とのこと
https://qiita.com/yamatai12/items/2691e4594eac4ae1b1a9
 

xlsx(Sheet.js)の最新verの情報

この記事の投稿時点ではこのverが@0.20.2が最新だった。
https://docs.sheetjs.com/docs/getting-started/installation/nodejs
一つ上の記事にある@0.20.1にはReDoSの脆弱性があるので注意(CVE-2024-22363)
https://cdn.sheetjs.com/advisories/CVE-2024-22363
 

npmのパッケージの脆弱性に手動対応する方法

特定のnpmのパッケージのモジュールに脆弱性があって、
npm audit fixnpm audit fix --forceで解決できなかった場合、
手動でpackage-lock.jsonを書き換えた後にnpm installすると良いとのこと
https://zenn.dev/tm35/articles/c170eac0b22f5f#③-手動で直す

ツイーティ・ザ・フォックスツイーティ・ザ・フォックス

実際に「danfojs@1.1.2(最新版)」の脆弱性を手動で解決

上記の記事を参考にして対処を実行!
 

1:package-lock.jsonでdanfojsのモジュールの部分を探す

package-lock.json内で「xlsx」で検索すると出てくると思う

    "node_modules/danfojs": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/danfojs/-/danfojs-1.1.2.tgz",
      "integrity": "sha512-KakcRbOJyJcv68iRsbIMDEWly/fUiznr1HfOhtdWUdwfbp5uGidq9ow426Cf5EQH/Sp8q/lVbjGtWcxB17zvSg==",
      "dependencies": {
        "@tensorflow/tfjs": "^3.13.0",
        "mathjs": "9.4.4",
        "papaparse": "^5.3.1",
        "plotly.js-dist-min": "2.8.0",
        "table": "6.7.1",
        "xlsx": "0.17.2"
      }

 

2:xlsxのverをCDNの最新版のやつに書き換えて保存

package-lock.jsonnode_modules/danfojs
dependenciesxlsxのverをSheet.JSのCDNに書いてある最新版に書き換える。
※v0.20.2は、この記事が書き込まれた時点での最新verなので注意。

"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz"

 

3:もう一回インストール →脆弱性の問題が解決!

脆弱性が消えて大丈夫になった。

npm install
removed 66 packages, changed 1 package, and audited 79 packages in 1s

9 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
このスクラップは5ヶ月前にクローズされました