Every CVE Search/ Get API key

CVE-2026-42601

ArchiveBox Vulnerable to RCE via unvalidated per-crawl config overrides in AddView

9.3 Critical

ArchiveBox is an open source self-hosted web archiving system. In versions 0.8.6rc0 and prior, the /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE. At time of publication, there are no publicly available patches.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
High

Exploit likelihood

0.40%Up 0.4 points since May 10, 2026
90%50%10%1%

What each source reports

CVE List Score used 9.3

ArchiveBox Vulnerable to RCE via unvalidated per-crawl config overrides in AddView

ArchiveBox is an open source self-hosted web archiving system. In versions 0.8.6rc0 and prior, the /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE. At time of publication, there are no publicly available patches.

Record
CVE-2026-42601
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-88
Updated
2026-11-02
EUVDEUVD-2026-28935 9.3

ArchiveBox is an open source self-hosted web archiving system. In versions 0.8.6rc0 and prior, the /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE. At time of publication, there are no publicly available patches.

Record
EUVD-2026-28935
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-3h23-7824-pj8r 9.3

ArchiveBox Vulnerable to RCE via unvalidated per-crawl config overrides in AddView

The /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE.

When PUBLIC_ADD_VIEW=True (common for bookmarklet usage), this is exploitable without authentication. The endpoint is also @csrf_exempt.

Affected code:

core/views.py:887 - user config extracted with no validation: custom_config = form.cleaned_data.get("config") or {}

core/views.py:918 - merged into crawl config: config.update(custom_config)

config/configset.py:255-256 - crawl config applied with high priority: if crawl and hasattr(crawl, "config") and crawl.config: config.update(crawl.config)

hooks.py:398-411 - config exported as env vars: for key, value in config.items(): if key in SKIP_KEYS: continue env[key] = str(value)

plugins/ytdlp/on_Snapshot__02_ytdlp.bg.py:122-123 - env var args passed to yt-dlp: ytdlp_args_extra = get_env_array("YTDLP_ARGS_EXTRA", []) cmd.extend(ytdlp_args_extra)

PoC (pre-auth when PUBLIC_ADD_VIEW=True):

curl -X POST http://localhost:8000/add/
-d "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ"
-d "depth=0"
-d "config={"YTDLP_ARGS_EXTRA": "[\"--exec\", \"id > /tmp/pwned\"]"}"

After the crawl runs, yt-dlp executes id > /tmp/pwned via its --exec flag.

Same approach works with GALLERYDL_ARGS_EXTRA (gallery-dl --exec), or overriding any *_BINARY key.

Impact: Remote code execution on the ArchiveBox server. Pre-auth when PUBLIC_ADD_VIEW=True.

Record
GHSA-3h23-7824-pj8r
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-88
Updated
2026-11-02
NVD 9.3

ArchiveBox is an open source self-hosted web archiving system. In versions 0.8.6rc0 and prior, the /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE. At time of publication, there are no publicly available patches.

Record
CVE-2026-42601
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-88
Updated
2026-11-02
OSV 9.3

ArchiveBox Vulnerable to RCE via unvalidated per-crawl config overrides in AddView

ArchiveBox is an open source self-hosted web archiving system. In versions 0.8.6rc0 and prior, the /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE. At time of publication, there are no publicly available patches.

Record
CVE-2026-42601
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-88
Updated
2026-11-02
OSVGHSA-3h23-7824-pj8r 9.3

ArchiveBox Vulnerable to RCE via unvalidated per-crawl config overrides in AddView

The /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE.

When PUBLIC_ADD_VIEW=True (common for bookmarklet usage), this is exploitable without authentication. The endpoint is also @csrf_exempt.

Affected code:

core/views.py:887 - user config extracted with no validation: custom_config = form.cleaned_data.get("config") or {}

core/views.py:918 - merged into crawl config: config.update(custom_config)

config/configset.py:255-256 - crawl config applied with high priority: if crawl and hasattr(crawl, "config") and crawl.config: config.update(crawl.config)

hooks.py:398-411 - config exported as env vars: for key, value in config.items(): if key in SKIP_KEYS: continue env[key] = str(value)

plugins/ytdlp/on_Snapshot__02_ytdlp.bg.py:122-123 - env var args passed to yt-dlp: ytdlp_args_extra = get_env_array("YTDLP_ARGS_EXTRA", []) cmd.extend(ytdlp_args_extra)

PoC (pre-auth when PUBLIC_ADD_VIEW=True):

curl -X POST http://localhost:8000/add/
-d "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ"
-d "depth=0"
-d "config={"YTDLP_ARGS_EXTRA": "[\"--exec\", \"id > /tmp/pwned\"]"}"

After the crawl runs, yt-dlp executes id > /tmp/pwned via its --exec flag.

Same approach works with GALLERYDL_ARGS_EXTRA (gallery-dl --exec), or overriding any *_BINARY key.

Impact: Remote code execution on the ArchiveBox server. Pre-auth when PUBLIC_ADD_VIEW=True.

Record
GHSA-3h23-7824-pj8r
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-88
Updated
2026-11-02
OSVPYSEC-2026-283 9.3

ArchiveBox Vulnerable to RCE via unvalidated per-crawl config overrides in AddView

The /add/ endpoint (AddView in core/views.py) accepts a config JSON field that gets merged into the crawl config without validation. This config is exported as environment variables when archive plugins run, allowing injection of arbitrary tool arguments to achieve RCE.

When PUBLIC_ADD_VIEW=True (common for bookmarklet usage), this is exploitable without authentication. The endpoint is also @csrf_exempt.

Affected code:

core/views.py:887 - user config extracted with no validation:

custom_config = form.cleaned_data.get("config") or {}

core/views.py:918 - merged into crawl config:

config.update(custom_config)

config/configset.py:255-256 - crawl config applied with high priority:

 if crawl and hasattr(crawl, "config") and crawl.config:
    config.update(crawl.config)

hooks.py:398-411 - config exported as env vars:

for key, value in config.items():
    if key in SKIP_KEYS: continue
    env[key] = str(value)

plugins/ytdlp/on_Snapshot__02_ytdlp.bg.py:122-123 - env var args passed to yt-dlp:

ytdlp_args_extra = get_env_array("YTDLP_ARGS_EXTRA", [])
 cmd.extend(ytdlp_args_extra)

PoC (pre-auth when PUBLIC_ADD_VIEW=True):

curl -X POST http://localhost:8000/add/ \
  -d "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ" \
  -d "depth=0" \
  -d "config={\"YTDLP_ARGS_EXTRA\": \"[\\\"--exec\\\", \\\"id > /tmp/pwned\\\"]\"}" 

After the crawl runs, yt-dlp executes id > /tmp/pwned via its --exec flag.

Same approach works with GALLERYDL_ARGS_EXTRA (gallery-dl --exec), or overriding any *_BINARY key.

Impact: Remote code execution on the ArchiveBox server. Pre-auth when PUBLIC_ADD_VIEW=True.

Record
PYSEC-2026-283
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
archivebox
PyPI
through 0.8.6rc0 None known
archivebox
PyPI
through 0.8.6rc0, plus listed versions
0.4.110.4.120.4.130.4.140.4.15
Show 45 moreShow less
0.4.160.4.170.4.180.4.190.4.200.4.210.4.60.4.80.4.90.5.00.5.10.5.20.5.30.5.40.6.00.6.10.6.20.7.00.7.10.7.20.7.40.8.5rc00.8.5rc10.8.5rc100.8.5rc110.8.5rc120.8.5rc130.8.5rc140.8.5rc150.8.5rc160.8.5rc170.8.5rc180.8.5rc20.8.5rc200.8.5rc210.8.5rc220.8.5rc230.8.5rc240.8.5rc250.8.5rc260.8.5rc270.8.5rc280.8.5rc290.8.5rc30.8.5rc30
None known

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-42601 is a critical vulnerability (CVSS 9.3) in Archivebox, published May 4, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.40%, the 34th percentile. No source names a fixed version.

References

This page doesn't list everything

Left out here: 26 versions. The JSON record has them.

MoveEnter Open