diff --git a/.drone.yml b/.drone.yml
index f618cff..9f28d3c 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -17,12 +17,12 @@ steps:
   - name: reuse
     image: fsfe/reuse:5.0.2-debian@sha256:7928d25ed14a1bc22758d917ebc6aecbb8bcd1a4da7aa748d7179c9011bbfb0b
   - name: lint
-    image: node:20.18.0-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9
+    image: node:22.12.0-alpine@sha256:60ed91cb8b3d78a7832700f89162667f65bd8ad715b446bd6b243f3397bc8292
     commands:
       - npm ci
       - npm run lint -- --no-fix
   - name: audit
-    image: node:20.18.0-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9
+    image: node:22.12.0-alpine@sha256:60ed91cb8b3d78a7832700f89162667f65bd8ad715b446bd6b243f3397bc8292
     commands:
       - npm install -g better-npm-audit
       - better-npm-audit audit --production --level=moderate
@@ -104,7 +104,7 @@ steps:
   - name: reuse
     image: fsfe/reuse:5.0.2-debian@sha256:7928d25ed14a1bc22758d917ebc6aecbb8bcd1a4da7aa748d7179c9011bbfb0b
   - name: lint
-    image: node:20.18.0-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9
+    image: node:22.12.0-alpine@sha256:60ed91cb8b3d78a7832700f89162667f65bd8ad715b446bd6b243f3397bc8292
     commands:
       - npm ci
       - npm run lint -- --no-fix
diff --git a/Dockerfile b/Dockerfile
index 213790f..0d74588 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: AGPL-3.0-or-later
 
-FROM node:20.18.0-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9 as builder
+FROM node:22.12.0-alpine@sha256:60ed91cb8b3d78a7832700f89162667f65bd8ad715b446bd6b243f3397bc8292 as builder
 
 COPY package.json package-lock.json ./
 RUN npm install