Ali Firasthesmartshadowindependent security research - source-code auditing, vulnerability discovery and coordinated disclosure

  1. Archive entry namesmallest

    A 7z archive names its own entries. The name is chosen by whoever built the archive. SevenZip._find_smallest_file() reads the entry list from the 7z process and returns the smallest entry's name as `smallest`.

    src/pyload/plugins/extractors/SevenZip.py line 136

  2. Path constructionos.path.join

    verify() joins the extraction destination with that name using os.path.join, which resolves a leading traversal segment instead of rejecting it.

    After the fixis_within_directory resolves both paths and requires os.path.commonpath to still equal the base, so the same name is refused here instead of resolving.

    src/pyload/plugins/extractors/SevenZip.py line 136

  3. os.remove(extracted)os.remove

    The joined path is passed straight to os.remove, so the deletion follows wherever the join resolved to.

    After the fixThe call is never reached: the path is refused before it is built.

    src/pyload/plugins/extractors/SevenZip.py line 138

  4. File deleted outside the destinationos.remove

    A file outside the intended extraction directory is removed. CVSS records no confidentiality impact and high integrity and availability impact.

    After the fixNothing outside the destination is reachable.

    src/pyload/core/utils/fs.py line 389

Every sentence above is read from the record's evidence file, which is generated from the upstream repository at the two commits it cites. The drawing adds no fact of its own, and no exploit sequence is published: the record explains the root cause.

Findings credited to this research

Every advisory published by someone else whose credit names this research as the reporter. The identifier links to the source that establishes the credit, never to an aggregator.

2026

Verified vulnerability credits with 2026 identifiers
IdentifierProjectFindingWeaknessEcosystem
CVE-2026-70622tar-rsSymlink escape in Builder::append_dir_all allows a privileged process to read a file outside the intended root into the archive.CWE-59Rust (crates.io)
CVE-2026-68930russhOperation on a resource after expiry, with an authorization check that could be bypassed.CWE-666Rust (crates.io)
CVE-2026-67320axiosPrototype pollution reachable through request handling, leading to information exposure.CWE-1321npm
CVE-2026-59896honoRace condition in request handling.CWE-362npm
CVE-2026-48525PyJWTUncontrolled resource consumption when decoding a crafted token.CWE-400PyPI
CVE-2026-45784rust-opensslIncorrect calculation of buffer size leading to an out-of-bounds write.CWE-131Rust (crates.io)
CVE-2026-45539microsoft/apmSymlink following on an output path, exposing information outside the intended location.CWE-59Go
CVE-2026-44724systeminformationCommand injection through unsanitised input reaching process execution.CWE-78npm
CVE-2026-44240basic-ftpUncontrolled resource consumption from an unbounded allocation.CWE-400npm
CVE-2026-39360RustFSMissing authorization on a request path.CWE-862Rust (crates.io)
CVE-2026-34601@xmldom/xmldomXML injection through incorrectly neutralised markup.CWE-91npm
CVE-2026-32936CoreDNSUncontrolled resource consumption reachable from a crafted request.CWE-400Go
CVE-2026-32808pyload-ngPath traversal during encrypted 7z password verification allowed a file outside the extraction directory to be deleted.CWE-22PyPI
CVE-2026-25500RackStored cross-site scripting from input that was not correctly sanitised.CWE-79RubyGems
CVE-2026-10722cilium/ebpfInteger overflow in BTF length checking.CWE-190Go

Open the credit index

Method

I start with the trust boundary, not a scanner result. I trace how external data reaches file operations, parsers, authorization checks, process execution, shared state, cryptographic buffers, or resource allocation.

A useful report should leave a project with more than a finding: a small reproducible case, affected-version analysis, a clear root cause, and a practical fix. Where it makes sense, the patch and its regression tests are written too. Severity stays separate from technical validity.

Recurring weakness classes
CWE-400 · 3
CWE-59 · 2
CWE-131 · 1
CWE-1321 · 1
Research atlasThe whole corpus as one drawing: findings, the software they affect, the weakness classes they belong to and the ecosystems they sit in.

Published findings and what they touch

15 findings, 2026 · 60 relationships

  • Weakness classesThe CWE class each finding was assigned.
  • FindingsVulnerabilities credited to this research, oldest on the left.
  • Affected softwareThe package or project each finding affects.
  • EcosystemsWhere the affected software is distributed.
  • All 15 findings carry 2026 identifiers, so horizontal position is identifier order; the bands are layout, not measurement.
Explore the data48 nodes · 60 relationships

Every node the topology draws and every relationship between them. Positions in the visualisation encode the band and the year; they are not measurements.

Weakness classes12

The CWE class each finding was assigned.

  • CWE-1901 relationship

    Common Weakness Enumeration class

  • CWE-791 relationship

    Common Weakness Enumeration class

  • CWE-221 relationship

    Common Weakness Enumeration class

  • CWE-4003 relationships

    Common Weakness Enumeration class

  • CWE-911 relationship

    Common Weakness Enumeration class

  • CWE-8621 relationship

    Common Weakness Enumeration class

  • CWE-781 relationship

    Common Weakness Enumeration class

  • CWE-592 relationships

    Common Weakness Enumeration class

  • CWE-1311 relationship

    Common Weakness Enumeration class

  • CWE-3621 relationship

    Common Weakness Enumeration class

  • CWE-13211 relationship

    Common Weakness Enumeration class

  • CWE-6661 relationship

    Common Weakness Enumeration class

Findings15

Vulnerabilities credited to this research, oldest on the left.

  • CVE-2026-1072220263 relationships

    Integer overflow in BTF length checking.

    • affectscilium/ebpf
    • classified asCWE-190
  • CVE-2026-2550020263 relationships

    Stored cross-site scripting from input that was not correctly sanitised.

    • affectsRack
    • classified asCWE-79
  • CVE-2026-3280820263 relationships

    Path traversal during encrypted 7z password verification allowed a file outside the extraction directory to be deleted.

    • affectspyload-ng
    • classified asCWE-22
  • CVE-2026-3293620263 relationships

    Uncontrolled resource consumption reachable from a crafted request.

    • affectsCoreDNS
    • classified asCWE-400
  • CVE-2026-3460120263 relationships

    XML injection through incorrectly neutralised markup.

    • affects@xmldom/xmldom
    • classified asCWE-91
  • CVE-2026-3936020263 relationships

    Missing authorization on a request path.

    • affectsRustFS
    • classified asCWE-862
  • CVE-2026-4424020263 relationships

    Uncontrolled resource consumption from an unbounded allocation.

    • affectsbasic-ftp
    • classified asCWE-400
  • CVE-2026-4472420263 relationships

    Command injection through unsanitised input reaching process execution.

    • affectssysteminformation
    • classified asCWE-78
  • CVE-2026-4553920263 relationships

    Symlink following on an output path, exposing information outside the intended location.

    • affectsmicrosoft/apm
    • classified asCWE-59
  • CVE-2026-4578420263 relationships

    Incorrect calculation of buffer size leading to an out-of-bounds write.

    • affectsrust-openssl
    • classified asCWE-131
  • CVE-2026-4852520263 relationships

    Uncontrolled resource consumption when decoding a crafted token.

    • affectsPyJWT
    • classified asCWE-400
  • CVE-2026-5989620263 relationships

    Race condition in request handling.

    • affectshono
    • classified asCWE-362
  • CVE-2026-6732020263 relationships

    Prototype pollution reachable through request handling, leading to information exposure.

    • affectsaxios
    • classified asCWE-1321
  • CVE-2026-6893020263 relationships

    Operation on a resource after expiry, with an authorization check that could be bypassed.

    • affectsrussh
    • classified asCWE-666
  • CVE-2026-7062220263 relationships

    Symlink escape in Builder::append_dir_all allows a privileged process to read a file outside the intended root into the archive.

    • affectstar-rs
    • classified asCWE-59

Affected software15

The package or project each finding affects.

  • cilium/ebpf20262 relationships

    Go · low severity · CWE-190

    • published inGo
  • Rack20262 relationships

    RubyGems · medium severity · CWE-79

    • published inRubyGems
  • pyload-ng20262 relationships

    PyPI · high severity · CWE-22

    • published inPyPI
  • CoreDNS20262 relationships

    Go · high severity · CWE-400

    • published inGo
  • @xmldom/xmldom20262 relationships

    npm · high severity · CWE-91

    • published innpm
  • RustFS20262 relationships

    Rust (crates.io) · medium severity · CWE-862

    • published inRust (crates.io)
  • basic-ftp20262 relationships

    npm · high severity · CWE-400

    • published innpm
  • systeminformation20262 relationships

    npm · high severity · CWE-78

    • published innpm
  • microsoft/apm20262 relationships

    Go · high severity · CWE-59

    • published inGo
  • rust-openssl20262 relationships

    Rust (crates.io) · medium severity · CWE-131

    • published inRust (crates.io)
  • PyJWT20262 relationships

    PyPI · medium severity · CWE-400

    • published inPyPI
  • hono20262 relationships

    npm · medium severity · CWE-362

    • published innpm
  • axios20262 relationships

    npm · high severity · CWE-1321

    • published innpm
  • russh20262 relationships

    Rust (crates.io) · medium severity · CWE-666

    • published inRust (crates.io)
  • tar-rs20262 relationships

    Rust (crates.io) · high severity · CWE-59

    • published inRust (crates.io)

Ecosystems5

Where the affected software is distributed.

  • Go3 relationships

    Package ecosystem

  • RubyGems1 relationship

    Package ecosystem

  • PyPI2 relationships

    Package ecosystem

  • npm5 relationships

    Package ecosystem

  • Rust (crates.io)4 relationships

    Package ecosystem

Researcher1

The origin of every relationship below.

  • TheSmartShadow15 relationships

    Independent security research. Every node below is a published finding.

    • credited onCVE-2026-10722
    • credited onCVE-2026-25500
    • credited onCVE-2026-32808
    • credited onCVE-2026-32936
    • credited onCVE-2026-34601
    • credited onCVE-2026-39360
    • credited onCVE-2026-44240
    • credited onCVE-2026-44724
    • credited onCVE-2026-45539
    • credited onCVE-2026-45784
    • credited onCVE-2026-48525
    • credited onCVE-2026-59896
    • credited onCVE-2026-67320
    • credited onCVE-2026-68930
    • credited onCVE-2026-70622

Elsewhere on this site

  • Writing

    Latest: CVE-2026-70622 - tar-rs `Builder::append_dir_all` symlink escape allows privileged out-of-root file disclosure (GitHub Gist, 2026-08-07).

  • Tools

    Latest: MIRSAD. MIRSAD is a local-first public content discovery and analysis system for institutional research.

  • About this archive

    What is published here, how it is verified, and how to report to it.

Search this site

Type to search research records, credits, writing and tools. Use the up and down arrows to move through results and Enter to open one.

Esc