公開 更新 新機能・アップデート執筆・監修 佐々木 航人が監修しながらAIを活用して執筆
n8nの脆弱性12件、6件は1.x系に修正が出ていない
n8nは10月28日、深刻度が「高」の3件を含む12件の脆弱性の勧告を出した。2.x系は2.45.5と2.46.1で12件とも直り、1.x系の1.123.89で直るのは6件だけ。自社で動かしているなら2.x系へ上げ、その前に古いコードノードを置き換える。
自社のサーバーでn8nを動かしているなら、2.x系の修正版へ上げる。2.45系なら2.45.5以降、2.46系なら2.46.1以降だ。n8nが10月28日にGitHubで公開した12件のセキュリティ勧告は、これらの版で全部直る。1.x系にも修正版は出た。ただし、直るのは12件のうち6件にとどまる。
n8nは、業務の手順をつないで自動で動かすワークフローのツールで、自社のサーバーにも置ける。10月14日にも10件の勧告が出ており、その中身は情シスの相棒の記事が詳しい。
「高」の3件は、どれもサーバーでコードが動く
12件のうち3件は、深刻度が「高」とされた1。3件とも、n8nが動くサーバーの上で、意図しないコードが動きうるものだ。
まず、ワークフローの式を評価するときの隔離が足りなかった。ワークフローを作る・直す権限がある利用者なら、この隔離を抜けて、サーバーで任意のコードを動かせた。
次に、公式のDockerイメージに入っている画像処理ソフト、GraphicsMagickに既知の脆弱性があった。外から受け取った画像をEdit Imageノードで処理すると、任意のコードを動かされるおそれがある。認証の無いWebhookからEdit Imageへ画像を渡すワークフローは、とくに危ない。
この2件は、1.x系の修正版でも直った。一方、3件目は1.x系に修正が出ていない。古いコードノード(Function、Function Item、LangChain Code)を使うと、n8n本体のプロセスでコードを動かせる件だ。Codeノードは、タスクランナーという別の仕組みに分けて動かす。しかし、古い3つのノードはこの隔離の外で動く。
| 使っている系列 | 上げる先 | 直る件数 |
|---|---|---|
| 2.46系 | 2.46.1以降 | 12件 |
| 2.45系 | 2.45.5以降 | 12件 |
| 1.x系 | 1.123.89以降 | 6件 |
11月3日時点で、GitHubで「stable」の印が付いているのは2.45.7、「beta」は2.46.4だ。
1.x系に修正が出ていない6件
残りの6件は、影響する版の範囲に1.x系も含む。それでも、1.x系の修正版は示されていない。古いコードノードの件に加えて、次の5件がある。
- 認証情報を使うノードが、別のサイトへリダイレクトされたときも、認証のヘッダーを付けて送る(HTTP Requestノードの4.4版は除く)
- 利用者が自分の認証情報をつなぐ流れで、OAuthのアカウントを乗っ取られうる
- Browser Useのアップロード機能で、n8nのサーバーにある任意のファイルを読める
- Asana TriggerノードのWebhookで、認証の無い要求から検証用の秘密を作り直せる
- OracleDBのVector Storeノードで、SQLインジェクションが起きうる
そのため、1.x系のまま更新を続けても、12件はそろって直らない。
2.x系へ上げる前に見直すこと
1.x系から2.x系へ上げると、互換性が崩れる変更をまたぐ。n8nの手引きにある主な変更は、次のとおり。
- Codeノードは、タスクランナーで動くのが既定になった。上げる前にN8N_RUNNERS_ENABLEDをtrueにすると、今のワークフローが動くかを試せる。
- Codeノードから環境変数を読むのは、既定で止まる。秘密の値は、認証情報の機能へ移す。
- コマンドを動かすExecute Commandと、ファイルの変化を見るLocal File Triggerは、既定で使えない。
- データの保存先にMySQLとMariaDBは使えない。上げる前に、移行のツールでPostgreSQLかSQLiteへ移す。
Codeノードを多く使う会社ほど、試す手間がかかるだろう。また、上げる先の2.45.5と2.46.1では、古いコードノードが既定で止まっている。これらのノードを足したり直したりしたワークフローは、保存できない。すでに保存したワークフローは、そのまま動き続ける。勧告は、Codeノードへの置き換えを求めている。
N8N_DEPRECATED_NODES_BLOCKをfalseにすれば、止めずに済む。ただし、脆弱な動きに戻る。3.0ではこれらのノード自体がなくなる(3.0のベータ版のニュース)。
すぐに上げられないとき
勧告には、上げるまでのつなぎの対策もある。ただし、どれも危険をなくすものではない。
- n8nに入れる利用者を、信頼できる人に絞る。
- 使わないノードを、環境変数NODES_EXCLUDEで外す。Edit Imageはn8n-nodes-base.editImage、古いコードノードはn8n-nodes-base.functionなどの名前で指定する。
- n8nから外への通信を、決まった相手に絞る。N8N_SSRF_PROTECTION_ENABLEDをtrueにしても、危険を減らせる。
- 信頼できないリダイレクト先に渡ったおそれのある認証情報は、作り直す。
n8nの手引きは、少なくとも月に1回の更新を勧めている。何版もまとめて飛ぶより、壊れる変更に気づきやすいからだ。
注
-
GHSA-gx3v-3x3v-f8r5(式の評価の隔離)、GHSA-f2cw-9483-7vcp(GraphicsMagick)、GHSA-9p7v-45m2-wxgj(古いコードノード)。CVSS 4.0の値は7.7、7.7、8.7。11月3日時点で、CVEの番号は付いていない。 ↩
出典
- Security advisories(n8n-io/n8n・GitHub)
- Insufficient Isolation in Workflow Expression Evaluation(GHSA-gx3v-3x3v-f8r5)
- Insecure GraphicsMagick Configuration(GHSA-f2cw-9483-7vcp)
- Deprecated Code Nodes Allow Code Execution in the n8n Main Process(GHSA-9p7v-45m2-wxgj)
- Credential-Using Nodes Forward Authentication Headers on Cross-Origin Redirects(GHSA-prmc-fg87-r4gh)
- Releases(n8n-io/n8n・GitHub)
- n8n v2.0 breaking changes(n8n Docs)
- Update n8n(n8n Docs)
この記事は、公式の発表をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航(株式会社Game)が担い、公開した記事も人が確認しています。記事の中身の責任は編集部が負います。誤りに気づいたときは 訂正の窓口 からお知らせください。直したときは、記事の末尾に更新の行を残します。