Severity Daily

IT and AI security incidents, checked against the primary source

Tag: RCE

  • Gitea’s federal deadline expired with 8,393 servers still vulnerable, and the exploitation record is one CPU alert

    Gitea’s federal deadline expired with 8,393 servers still vulnerable, and the exploitation record is one CPU alert

    CISA gave federal agencies three days to fix a critical Gitea remote code execution flaw. The clock ran out on 28 August; the day before, Shadowserver counted 8,393 vulnerable instances — and the entire public record of exploitation is one developer’s blog post about a high CPU alert.

    What happened

    CVE-2026-60004 is a remote code execution flaw in Gitea, the self-hosted Git service. NVD published the record on 26 August 2026, last modified it on 27 August, and lists it as Analyzed. The description, verbatim: “Gitea before 1.27.1 allows remote code execution via the diffpatch API through Git hook installation.” MITRE scored it CVSS v3.1 9.8, Critical, vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, CWE-94. Affected versions run from 1.17.0 through 1.27.0.

    The federal timeline, from NVD’s republication of CISA’s catalog fields: cisaExploitAdd of 2026-08-25, cisaActionDue of 2026-08-28, catalog name “Gitea Code Injection Vulnerability.” That is a three-day clock under BOD 26-04, and it expired yesterday. CISA’s SSVC decision points on the record read Exploitation: active, Automatable: yes, Technical Impact: total.

    The fix has been available for a month. Gitea 1.27.1 shipped on 27 July 2026, and the project’s security advisory, GHSA-rcr6-4jqh-j84m, went up on 28 July, credited to a researcher going by NightRang3r.

    The mechanism is worth spelling out because it explains the exposure. The diffpatch endpoint lets a user apply a patch to a repository through the web interface. Submit the same patch twice and you produce an add/add collision. Git’s three-way merge fallback then checks out the indexed path despite the --cached flag. In a bare clone — which is how Gitea stores repositories — the repository root is $GIT_DIR, so a file written to hooks/post-index-change is not an inert file in a working tree. It is a live hook, and Git executes it during index operations.

    The precondition, in the advisory’s own words: “An attacker with ordinary write access to a repository can execute arbitrary shell commands as the Gitea OS user.” And then the sentence that turns a privileged bug into a 9.8: “With open registration enabled, the attack can be performed by an unauthenticated visitor after registering a normal account and creating a repository.”

    On 27 August, the Shadowserver Foundation’s scanning reported 8,393 IP addresses found vulnerable — one day before the federal deadline, one month after the patch.

    Why it matters

    Start with the exploitation evidence, because it is thinner than the SSVC value suggests and readers deserve to know what “actively exploited” is resting on here.

    The public record we could find amounts to a single incident report, published on the Russian technical blog Habr by a full-stack developer describing his own organization’s self-hosted Gitea server. His hosting provider, HOSTKEY, flagged the machine for sustained CPU usage above 70 percent in breach of terms of service. Working backward, he determined that “an automated scanner was able to register an account, create its own repository, and trigger the exploit chain,” and that the active phase of the attack lasted roughly eleven seconds. On what was actually deployed, he is candid: “I do not have confirmed information regarding the mining pool, wallet, miner family, or specific operator.”

    That is one host, one operator’s account, no vendor telemetry, no second observer, and no named payload family. Coverage has rendered it as cryptocurrency mining malware, which is a reasonable inference from a CPU alert and is not what the reporter says he can confirm. CISA’s catalog entry, as usual, does not cite its evidence, so we cannot tell whether the agency is working from this report or from something it has not published.

    None of which means the listing is wrong. This is a case where the thin exploitation record and the aggressive federal clock are both defensible, and the reason is in the mechanism rather than the telemetry. The advisory shipped with a proof of concept. The attack requires no credential when open registration is on, which is a common configuration for internal and community instances. The whole chain — register, create repo, submit a patch twice — is three HTTP interactions a scanner can automate end to end, which is exactly what the Habr report describes happening in eleven seconds. Automatable: yes is the honest reading. When a bug is that cheap to fire, one confirmed hit and a published PoC really is enough to justify treating it as a live threat, because the gap between one and thousands is a scan cycle.

    The more uncomfortable number is 8,393. A patch that has been public for a month, a CVSS 9.8, a proof of concept in the advisory, a federal deadline — and the day before that deadline, more than eight thousand instances still answering. Self-hosted Git is a specific kind of blind spot. It gets stood up by a platform team or a research group, it does not appear in a SaaS inventory or a software bill of materials, nobody has an agent on it, and it accumulates exactly the assets an attacker wants: source, CI configuration, deploy keys, and the tokens that let a build pipeline reach production. Code execution as the Gitea OS user on that box is not a mining problem. Mining is what you notice.

    There is a second lesson in how the advisory reads. “An attacker with ordinary write access to a repository” is the first sentence, and taken alone it sounds like an insider-risk item — the kind of finding a team defers because everyone with repository access is already trusted. The open-registration clause that removes the precondition entirely is the sentence after. Gitea wrote both, plainly and in order, and the project deserves credit for that. But the sequencing matters when a busy administrator skims, and the 9.8 with PR:N is the score that reflects the second sentence, not the first. If your instance requires an administrator to create accounts, your practical exposure is genuinely lower than 9.8 implies. If it does not, the score is right and the first sentence is misleading you.

    Finally, the deadline itself. It passed on 28 August, quietly: there is no published compliance figure and no notification anyone receives. For the many organizations that ingest KEV as a prioritization input, an elapsed due date sorts as lower priority in a lot of tooling, when it should sort as higher.

    What to do

    • Upgrade to Gitea 1.27.1 or later. Everything from 1.17.0 through 1.27.0 is affected — a range covering several years of releases, so “we are on a recent 1.2x” is not an answer.
    • Find the instances first. Look for listeners on 3000/tcp, the Gitea default, and search DNS and reverse proxy configurations for git. hostnames. The instance most likely to be unpatched is the one no inventory knows about.
    • Turn off open registration if you cannot upgrade immediately. In app.ini, set DISABLE_REGISTRATION = true under [service]. This does not fix the bug — any authenticated user with write access to any repository can still trigger it — but it removes the unauthenticated path, which is the one the scanners are using.
    • Check for hooks nobody wrote. On each repository under Gitea’s data directory, inspect the hooks/ directory, and treat post-index-change with particular suspicion — Gitea does not normally place one there. Compare modification times against your patch date.
    • Look at CPU before you look at logs. In the one documented case, the alert came from the hosting provider, not from security tooling. Sustained unexplained load on a Git server is worth an hour of somebody’s time.
    • Rotate what the box held. If you find evidence of execution, deploy keys, CI runner tokens, webhook secrets and any credentials in repository settings should be treated as disclosed. Patching returns the server; it does not return the secrets.
    • FCEB agencies: the due date was 28 August. If you are not there, you are past it, and the remediation obligation does not lapse with the date.

    Sourcing note

    Checked: NVD’s API record for CVE-2026-60004, which supplied the description, CVSS v3.1 score and vector, CWE, affected range, and the CISA catalog fields — cisaExploitAdd 2026-08-25, cisaActionDue 2026-08-28, catalog name, and the SSVC decision points — as NIST republishes them verbatim from CISA. cisa.gov blocks automated fetching, so the catalog page itself was not read. Gitea’s security advisory GHSA-rcr6-4jqh-j84m on GitHub supplied the mechanism, the affected and patched versions, the researcher credit and both quoted sentences about write access and open registration.

    Single-sourced and labeled as such: the exploitation account is one developer’s report on Habr, reaching us through Help Net Security and The Hacker News, both of 26 August, which agree on its substance. We did not read the Habr post directly. No vendor has published corroborating telemetry, no payload family is named by the reporter, and the characterization of the payload as a cryptocurrency miner is an inference drawn in coverage from a CPU alert, not a confirmed identification.

    The figure of 8,393 vulnerable IP addresses on 2026-08-27 is the Shadowserver Foundation’s, reported by BleepingComputer on 28 August; we could not read Shadowserver’s own posting and carry the number as reported. It counts internet-reachable instances that answered a scan — a floor, not a census. Instances behind VPNs or reverse proxies are not in it, and are not therefore safe.

    Unresolved: what evidence CISA relied on for the KEV addition, which is not published; whether any payload family has been identified; and what federal compliance with the 28 August deadline actually looks like, for which no figure exists.

  • PaperCut’s zero-day is now two chained CVEs, and the first emergency patch does not stop the chain

    PaperCut’s zero-day is now two chained CVEs, and the first emergency patch does not stop the chain

    PaperCut’s unnamed zero-day now has two CVE numbers, a confirmed chain, and a second emergency patch — because researchers bypassed the first one. Anyone who patched on 27 August is not protected.

    What happened

    On 27 August 2026, PaperCut published an urgent security bulletin saying customers were being attacked through a flaw in its NG and MF print management servers. There was no CVE identifier, no description of the vulnerability, and no entry in CISA’s Known Exploited Vulnerabilities catalog. We covered that bulletin, and the out-of-band builds that shipped alongside it, here.

    Two things changed on 28 August.

    First, the flaw got numbers. NVD published CVE-2026-82078 at 16:18 UTC on 28 August and CVE-2026-81578 the same day. Both records are still in Received status and were last modified on 29 August.

    CVE-2026-82078 carries a CVSS v4.0 base score of 9.4, Critical, vector CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H, and is classed CWE-470. The NVD description reads, verbatim: “An unsafe dynamic class loading vulnerability exists in the database connection utilities of PaperCut MF and PaperCut NG. The application instantiates database driver classes based on configurable driver names without validating against an allowlist of approved drivers.”

    CVE-2026-81578 carries a CVSS v4.0 base score of 8.8, High, vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N. It is an improper access control flaw in the web management interface: unauthenticated remote requests aimed at administrative functions can trigger backend actions before access validation finishes, which is enough to modify configuration.

    Second, the patch changed. PaperCut shipped Emergency Patch Release 2 on 28 August at approximately 2:45 p.m. Eastern, covering versions 24, 25 and 26 on Windows, Linux and macOS. The NVD records place the fix boundaries at 24.1.10, 25.0.13 and 26.0.5, which supersedes the 26.0.4 and 25.0.12 builds that went out on 27 August. Version 24, which had no fix at all when the bulletin first appeared, now has one.

    The reason for the second patch is the part worth reading twice. According to reporting that both Rapid7 and BleepingComputer carry, watchTowr reproduced the vulnerabilities in full, found multiple bypasses of the first emergency patch, and identified a further authentication bypass. Help Net Security reports PaperCut’s guidance as: install Release 2 even if you have already applied the original emergency patch. Rapid7 puts it more bluntly — an organization running the first patch is not protected.

    Huntress, which observed the attacks, states the relationship between the two flaws directly: “Chained together these flaws enable pre-authentication remote code execution in the PaperCut Application Server.” Its telemetry still describes two customer environments, the first on 26 August lasting under two minutes, the second on 27 August on a server running 24.1.5.71847. PaperCut told reporters the attacks “appear limited and targeted” and that it is withholding post-exploitation detail while it investigates.

    Why it matters

    Look at what the two vectors say on their own, because this is where score-driven triage fails.

    CVE-2026-82078 is the 9.4, and it requires high privileges: PR:H. Read alone, it is an administrator-only bug — serious, but not the thing you drop a Friday for. CVE-2026-81578 needs no privileges at all, but its confidentiality impact is low and its scope is unchanged; read alone, it is a configuration-tampering flaw. Neither record, on its own terms, describes an unauthenticated attacker getting code execution on a print server.

    Together they do, and the mechanism is visible in the two records without anyone having to explain it. The 8.8 lets an unauthenticated request reach an administrative function and change configuration. The 9.4 is a class loader that instantiates “database driver classes based on configurable driver names” with no allowlist. Change the configurable name, and the thing that needed admin rights is handed to you by the thing that did not.

    That reading also lines up with an indicator PaperCut published on 27 August, before either CVE existed: ERROR No suitable driver found for jdbc:no:x. A JDBC driver string that resolves to nothing is exactly the residue of an attempt to make the application load a class by name. PaperCut has not said the two are connected and we are not reporting that it has — but the vendor was publishing the fingerprint of the class-loading path a full day before the class-loading CVE was assigned.

    CVSS has no way to express any of this. There is no chain field. Both scores are correct for what they measure and both understate the situation, and an organization sorting a patch queue by base score would put a PR:H 9.4 behind any number of unauthenticated 9.8s. This is a recurring problem and it is worth naming: the chain, not the component, is the unit of risk, and the record is organized around components.

    The second point is about the federal record, and it is a live discrepancy rather than a theory. Both NVD entries carry CISA’s SSVC decision points. On CVE-2026-82078 they read Exploitation: none, Automatable: no, Technical Impact: total. On CVE-2026-81578 they read Exploitation: none, Automatable: yes, Technical Impact: partial.

    “Exploitation: none” is on both, on 29 August, on a vulnerability the vendor has confirmed is being used against its customers and for which it has now shipped two emergency patches in two days. Neither record carries a cisaExploitAdd date, so there is no KEV entry and no federal remediation deadline attached to any of this.

    We do not read that as CISA getting it wrong. These records went up hours after assignment and are still in Received status; SSVC values on a fresh record are an initial assessment, and they get revised. The point is operational: right now, anyone pulling PaperCut’s risk posture from the machine-readable record gets “not exploited,” while the vendor bulletin says the opposite. If your prioritization is automated off NVD, this is the case where it is wrong in the direction that costs you.

    It is also worth noting which words those decision points use. Exploit automation and total-versus-partial technical impact are two of the four variables BOD 26-04 uses to derive federal remediation deadlines. We are not asserting a mapping — CISA publishes the authoritative schedule only as images, and public transcriptions of it disagree with one another. But the inputs to that schedule are, for this vulnerability, currently recorded as “not exploited.”

    Third: watchTowr’s further authentication bypass is, as reported, an additional flaw rather than one of the two numbered here, and we found no CVE for it and no PaperCut statement naming it. Release 2 is described as fixing it. That leaves an unnumbered vulnerability inside a shipped patch — a thing to watch, not a thing to act on.

    What to do

    • Apply Emergency Patch Release 2. Target 24.1.10, 25.0.13 or 26.0.5 or later, per the fix boundaries in the NVD records. If you patched on 27 August to 26.0.4 or 25.0.12, you are on the bypassed build.
    • Version 24 now has a fix where it did not before. If you deferred because nothing was available, re-check.
    • Keep the network restriction in place regardless. PaperCut’s original mitigation stands: if the Application Server is reachable from the public internet, restrict web access to trusted IP addresses. Given a patch that has already been bypassed once, treat exposure reduction as the control and the patch as the backup.
    • Hunt for the pre-patch window. The original indicators still apply, and they matter more now that we know the mechanism: ERROR No suitable driver found for jdbc:no:x in server.log, base64 strings in server.log, missing or truncated logs, and stray .class files. Huntress recovered Udydn.class and Moo97.class, which self-delete. Absence of indicators is not evidence of cleanliness — the vendor said so itself.
    • If you run v23 or older, you have no patch. Huntress reports 47 percent of the roughly 2,500 PaperCut installations it tracks are on v23 or earlier. That is one vendor’s visibility, not a global census, but for those servers network isolation is the entire answer.
    • Do not wait for a KEV entry. There is none, and if your process keys on federal deadlines this will not trip it.

    Sourcing note

    Checked: NVD’s API records for CVE-2026-82078 and CVE-2026-81578, which supplied the descriptions, CVSS v4.0 vectors, CWE, affected-version boundaries and CISA SSVC decision points quoted above, and which confirm no cisaExploitAdd or cisaActionDue on either; Huntress’s own writeup for the exploitation observations, the chaining statement and the installed-base figure.

    Could not reach: PaperCut’s security bulletin at papercut.com renders its body through client-side script and returned only navigation to us on repeated attempts, so every quotation attributed to PaperCut here is taken from outlets that read the bulletin — Rapid7, BleepingComputer and Help Net Security — and is labeled as such rather than quoted as primary. watchTowr’s findings were published to LinkedIn, which we could not fetch; they are reported here as secondary, via Rapid7 and BleepingComputer, which agree on the substance.

    One record oddity: at approximately 11:50 UTC on 29 August, a direct NVD lookup by cveId=CVE-2026-81578 returned zero results while a keyword query returned the full record. That is an indexing lag, not a retraction.

    Unresolved: exact build numbers for Emergency Patch Release 2, which we could not confirm from a primary source — use the version boundaries instead. Whether watchTowr’s additional authentication bypass will receive its own CVE. Whether CISA will add either CVE to the KEV catalog, and whether the SSVC decision points on these records will be revised from “Exploitation: none.” We will follow the KEV catalog and update if that changes.

  • UI-TARS-desktop’s MCP servers listened on every interface with no authentication, and the fix is a commit, not a release

    UI-TARS-desktop’s MCP servers listened on every interface with no authentication, and the fix is a commit, not a release

    CVE-2026-81735 scores 10.0 because the MCP command server had no authentication and listened on every interface — and the remediation is identified by a commit hash, not a version.

    What happened

    VulnCheck, acting as CNA, published CVE-2026-81735 on 27 August 2026, against ByteDance’s UI-TARS-desktop. GitHub’s advisory database carries it as GHSA-p68p-fq8j-3639, published and last updated the same day, where it is classified as an unreviewed advisory — a machine-imported record rather than one GitHub curated. The CVSS v4.0 base score is 10.0, vector AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H. The weakness is CWE-306, missing authentication for a critical function. Credit goes to Avishai Gonen of Pluto Security. Neither the CNA advisory nor the GitHub record states that exploitation is known.

    The mechanism is described plainly in the advisory and is worth reading closely. In the project’s mcp-http-server package, startServer.ts defaulted its listen address to '::' when no host was configured, binding MCP transports to all interfaces. Authentication middleware was optional. The entry points for @agent-infra/mcp-server-commands and @agent-infra/mcp-server-filesystem initialized their servers without any middleware at all. And the commands server’s run_command tool, in VulnCheck’s wording, “hands its caller-supplied command string to promisify(child_process.exec).” GitHub’s record states the consequence directly: “any unauthenticated client able to reach the port could run arbitrary commands as the user running the server.” The filesystem server exposed file operations on the same terms.

    The affected range, as VulnCheck states it, is >= 0, < commit c2ad42e3eb9b27830db41a3e6f51ca7179d9b168. That is the fix. There is no fixed version number in either record, and GitHub’s advisory lists affected and patched versions as unknown.

    Why it matters

    Start with '::'. That is the IPv6 unspecified address, and on a dual-stack host a socket bound there will in the common configuration accept IPv4 connections as well. A default of '::' is not a slightly permissive localhost — it is every interface the machine has, including the wireless one it is using at a conference, a hotel, or a client site. Developer tooling routinely assumes it is talking to itself over loopback, and that assumption is usually invisible until someone reads the default in the source.

    This is now a recognizable shape in Model Context Protocol deployments, and it is structural rather than incidental. MCP was designed around a local, single-user model, with stdio as the original transport: the server is a subprocess of the client, on the same machine, run by the same person, and there is no network and therefore no authentication problem to solve. HTTP transport was added for good reasons and moves the same server onto a socket. What does not automatically move with it is the trust model. Code written under “the only caller is me” becomes code reachable by anyone who can route to the port, and nothing in the source has to change for that to happen — only a default.

    Note what kind of flaw this is not. There is no parser bug here, no injection through a quoting mistake, no memory-safety issue. run_command passing a string to child_process.exec is the tool functioning exactly as designed; running commands is its entire purpose. CWE-306 is the correct classification precisely because the defect is the absence of a gate rather than the presence of a dangerous sink. That distinction matters for remediation: there is no input to validate and no filter to add. The only fixes are requiring authentication and not listening where you did not mean to listen. It also means any MCP server exposing a shell, a filesystem, or a browser is one bad default away from the same finding, whatever its code quality.

    The bigger operational problem in this record is the remediation itself. “Affected: everything before commit c2ad42e” cannot be expressed as a version constraint. It does not fit an SBOM, a package manifest, a Dependabot rule, or a scanner signature. The @agent-infra packages are published and versioned, but the advisory does not say which published version first contains the fix, so a defender holding a lockfile cannot answer the only question that matters — am I affected — without reading the shipped code or diffing against the repository. Combine that with the GitHub record being unreviewed, which is the tier at which ecosystem alerting is least likely to fire, and you have a critical-severity finding that is unusually easy to miss through the normal channels. That is why we are filing this under Patch Now rather than Patch Soon: there is a fix, but there is no version to upgrade to, so the near-term control is configuration and network placement.

    Finally, weigh the blast radius honestly. The advisory says arbitrary commands run “as the user running the server,” and the user running the server is a developer on a workstation. That machine typically holds cloud credentials, SSH keys, signed-in package registry tokens, source code for things that are not this project, and browser sessions. An agent desktop application is not a server in a rack with a scoped service account; it is the most credential-dense endpoint in most organizations. A 10.0 on a developer laptop is not a smaller problem than a 10.0 on a server, and in a lot of environments it is a larger one.

    What to do

    First, find out whether you are listening. On the machines where UI-TARS-desktop or the @agent-infra MCP servers are installed, enumerate listening sockets — ss -ltnp on Linux, lsof -iTCP -sTCP:LISTEN -P -n on macOS — and look for any node process bound to :: or 0.0.0.0 rather than 127.0.0.1 or ::1. That check is worth running against every MCP server you have deployed over HTTP, not only this one.

    Where you find one, bind it explicitly. Set the host to loopback rather than relying on the default, and enable the authentication middleware rather than leaving it optional. Add a host firewall rule denying inbound connections to the port as a second layer, because a configuration file is easier to lose in an upgrade than a firewall rule.

    For the fix itself, you need a build that contains commit c2ad42e3eb9b27830db41a3e6f51ca7179d9b168. Because no fixed version is published in either advisory, confirming that from a version number alone is not possible. Check the shipped code for the default listen address in startServer.ts, or build from a source tree that includes the commit, and treat any package version you cannot verify this way as unfixed.

    If one of these servers was reachable from an untrusted network — a shared office, conference wifi, a coworking space, any laptop that left the building — do not treat this as a configuration cleanup. Rotate cloud credentials, registry tokens, and SSH keys present on that workstation, review shell history and scheduled tasks for entries you did not create, and check outbound connection logs if you have them. Unauthenticated command execution as the logged-in user leaves nothing meaningfully off limits.

    Sourcing note

    The CVE identifier, CVSS v4.0 score and vector, CWE assignment, affected range, fix commit, researcher credit, and technical description are taken from VulnCheck’s advisory for CVE-2026-81735, published 27 August 2026, with VulnCheck as the assigning CNA, and from GitHub’s advisory record GHSA-p68p-fq8j-3639, published and updated the same date. Both were read directly. Quoted phrases — including the run_command and child_process.exec description and the “any unauthenticated client able to reach the port” consequence — are the advisories’ own words.

    The CVE record was published 27 August 2026; this story is published on the evening of 28 August. We could not reach NVD’s API for CVE-2026-81735 at press time — the service returned HTTP 429 rate-limit responses to repeated requests — so NVD’s own enrichment, including any NVD-assigned CVSS score that may differ from the CNA’s, has not been checked. Where a CNA score and an NVD score diverge we would normally show both.

    Unresolved: neither advisory names a fixed release version, and we did not find one, so the affected published versions of @agent-infra/mcp-server-commands and @agent-infra/mcp-server-filesystem remain unenumerated. We have not fetched or reviewed the fix commit itself, have not tested any version of the software, and have seen no report of exploitation. No vendor statement from ByteDance was located.

  • Langflow 1.11.2 fixes three code-execution flaws, one of them unauthenticated, with no workaround offered

    Langflow 1.11.2 fixes three code-execution flaws, one of them unauthenticated, with no workaround offered

    Three code-execution CVEs against Langflow OSS 1.0.0 through 1.11.1 reached NVD late Friday; one needs no credentials, IBM lists no workaround, and the fix is 1.11.2.

    What happened

    NVD published three CVE records for IBM Langflow OSS at 22:16 UTC on 28 August 2026. IBM’s own security bulletin, at ibm.com support node 7284733, is dated 24 August 2026 — five days earlier. So the vendor advisory is not new tonight; the machine-readable records that vulnerability scanners and SBOM tools consume are.

    All three affect Langflow OSS 1.0.0 through 1.11.1, and all three are fixed in 1.11.2. In the bulletin’s workaround field, IBM states: “None.”

    CVE-2026-19286 carries a CVSS 3.1 base score of 9.8 from IBM PSIRT, vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, CWE-94. NVD’s description reads: “IBM Langflow OSS 1.0.0 through 1.11.1 could allow a remote attacker to execute arbitrary code due to improper enforcement of security restrictions on the A2A public endpoint.” PR:N is the operative field — no privileges required. IBM’s bulletin frames the condition as the A2A feature being enabled with no authentication requirement.

    CVE-2026-19295 scores 9.9, vector AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H, CWE-95. The description: “IBM Langflow OSS 1.0.0 through 1.11.1 allows an authenticated attacker to execute arbitrary operating system commands in the server process by saving a flow with a crafted type field value and triggering a build of a wrapper flow that references it.” The score is higher than the unauthenticated one because of S:C — scope change, meaning the impact escapes the vulnerable component. Low privileges are required, which in a Langflow deployment means any account that can save a flow.

    CVE-2026-18729 scores 8.8, vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, CWE-94: “IBM Langflow OSS 1.0.0 through 1.11.1 could allow a remote authenticated attacker to execute arbitrary code due to improper control of generation of code.”

    Langflow is the open-source visual builder for LLM applications and agent workflows that came to IBM with its acquisition of DataStax. A2A is the agent-to-agent interoperability protocol; the endpoint in question exists so that other agents can reach a Langflow-hosted agent, which is to say it exists to be exposed. There is no reported exploitation of any of the three, and none appears in CISA’s Known Exploited Vulnerabilities catalog as of this writing.

    Why it matters

    Langflow has been here before, and the previous round ended in KEV. CVE-2025-3248, published 7 April 2025, scored 9.8 with the same PR:N profile: “Langflow versions prior to 1.3.0 are susceptible to code injection in the /api/v1/validate/code endpoint. A remote and unauthenticated attacker can send crafted HTTP requests to execute arbitrary code.” CISA added it to the catalog on 5 May 2025 under the name “Langflow Missing Authentication Vulnerability,” with a federal action due date of 26 May 2025. Sixteen months later the product has produced another unauthenticated remote code execution finding, in a different endpoint, with the same root shape: a network-reachable surface that will run code, and an authentication boundary that was not where it needed to be.

    That repetition is the point, and it is not really a Langflow problem. Frameworks in this category execute user-supplied code as their function. A flow builder that could not run arbitrary Python would not be a flow builder. That means the entire security model rests on two things — who can reach the service, and who is allowed to save and build a flow — and both of those are configuration, not code. CWE-94 and CWE-95 findings in a product whose job is generating and running code are not aberrations to be patched away one at a time; they are the expected failure mode of the category, and they should change how the thing is deployed rather than only how promptly it is updated.

    The A2A endpoint sharpens this. Agent interoperability protocols exist to let agents call each other across organizational boundaries, which means the endpoint is designed to be reachable by parties you do not control. The older Langflow KEV entry was for an endpoint that should never have been public and often was. This one is for an endpoint that is meant to be public. That is a harder problem, because the mitigation of last resort for the 2025 flaw — put it behind something — is a partial contradiction of what A2A is for.

    The five-day gap between the bulletin and the CVE records is worth naming too. Between 24 and 28 August, an organization running Langflow could have been fully patched if a human read IBM’s bulletin, and would have shown clean in any tool that matches installed versions against NVD, because there was nothing in NVD to match. This is an ordinary and well-known lag, not misconduct, but it is a reminder that “no findings” from a scanner is a statement about the feed, not about the software. For a product with a KEV history, the vendor’s own bulletin page is worth watching directly.

    One record note, since it will confuse anyone who goes and reads the 2025 entry: the required-action text CISA attached to CVE-2025-3248 tells agencies to “follow applicable BOD 22-01 guidance for cloud services.” BOD 22-01 was superseded and revoked by BOD 26-04 on 10 June 2026, and the boilerplate on older catalog entries has not caught up. We covered that pattern separately in this week’s look at KEV required-action text. It does not change what to do about the 2026 CVEs, which carry no federal deadline because they are not in the catalog.

    Finally, consider what a Langflow instance holds. These deployments accumulate provider API keys, database credentials, and connection strings for whatever the flows talk to, because that is what makes a flow useful. Code execution in the server process is therefore rarely just code execution in the server process. Any incident response here has to assume the secrets configured in the environment are the actual loss, and treat rotation as part of remediation rather than a follow-up item.

    What to do

    Upgrade Langflow OSS to 1.11.2. IBM offers no workaround for any of the three, so there is no supported alternative to updating.

    Before you get there, reduce reach. Inventory every Langflow instance you run, including ones stood up for a demo and never removed, and determine which are reachable from outside your network. If the A2A feature is enabled and you are not actually using agent-to-agent interoperability, disable it. If you are using it, confirm that the endpoint requires authentication rather than relying on the assumption that it does — CVE-2026-19286 exists because that assumption can be wrong.

    Then tighten who can build. Both CVE-2026-19295 and CVE-2026-18729 require only a low-privilege authenticated account, so review who holds Langflow accounts, remove leftover and shared logins, and treat the ability to save a flow as equivalent to shell access on that host, because on 1.11.1 and earlier it is.

    For anything that was internet-facing on an affected version, do not stop at the upgrade. Review server-process logs for unexpected child processes and outbound connections, check for flows you did not create, and rotate every credential and API key stored in or reachable from the instance. If you were running a version below 1.3.0 at any point, also confirm the 2025 issue was actually remediated rather than assumed — that one is in KEV, which means exploitation was documented.

    Sourcing note

    CVE identifiers, descriptions, CVSS vectors and scores, CWE assignments, affected version ranges, and publication timestamps are quoted from NVD’s API records for CVE-2026-19286, CVE-2026-19295, and CVE-2026-18729, each published 28 August 2026 at 22:16 UTC, with CVSS supplied by [email protected]. The fixed version, the affected product range, and the “None” workaround statement come from IBM’s security bulletin at ibm.com support node 7284733, dated 24 August 2026, read directly.

    The 2025 background — CVE-2025-3248’s description, 9.8 score, 7 April 2025 publication, the 5 May 2025 KEV addition, the 26 May 2025 action due date, the catalog name “Langflow Missing Authentication Vulnerability,” and the quoted required-action text — is taken from that CVE’s NVD record, which republishes CISA’s own catalog fields. We did not fetch cisa.gov directly; it returns 403 to automated requests, and NVD’s cisaExploitAdd, cisaActionDue, cisaVulnerabilityName and cisaRequiredAction fields are NIST republishing CISA verbatim.

    Unresolved: none of the three 2026 CVEs has any public exploitation report, proof of concept, or KEV entry that we could find, and IBM’s bulletin does not state whether the issues were found internally or reported externally. We have not independently verified the technical mechanism of any of the three; the descriptions above are the vendor’s and NVD’s. The characterization of Langflow deployments as holding provider credentials is a general property of the product’s design, not a finding about any specific instance.