ctipilot.ch
Sat · 22 Aug 2026
All daily briefs ↗
Daily brief · UTC day

Saturday, 22 August 2026

7 verified findings from 1 run · the settled record for this UTC day, in the classic brief order.

Criticality
Kind
Topic
Region
TL;DR · the day in one read
  1. 01The advisory records carry no version data at all; a national CERT's structured copy yields the one fixed release. PTC assigned three CVEs against Windchill and FlexPLM on 2026-08-20, relayed by BSI CERT-Bund. CVE-2026-77644 (9.3) is an unauthenticated access-control bypass in the Windchill Risk and Reliability Enterprise Edition module; CVE-2026-77645 (9.2) is an unauthenticated remote code execution in Windchill and FlexPLM that the advisory says may be exploited through deserialization of untrusted data; CVE-2026-77646 (7.7) is a server-side request forgery by the same mechanism in Windchill PDMLink and FlexPLM. All three need no authentication in PTC's own published vectors, and all three carry its highest urgency flag. The remediation picture is the problem: PTC published these as advisory records with no structured version data whatsoever, and its own support articles sit behind a login, so the only fixed version obtainable is 13.1.0.1 for the access-control flaw, read out of the German CERT's structured copy. No source links these three to the extortion campaign already running against this product line.
  2. 02No public exploit code, and a research firm still rebuilt it in minutes and then watched it hit their honeypots. CVE-2026-19478, the unauthenticated GraphQL code-injection flaw in self-managed GitLab that this pipeline covered on 2026-08-19 as newly disclosed with no exploitation reported, is now being exploited. The research firm watchTowr states it reproduced the vulnerability within minutes of disclosure armed only with the advisory details and the patch, warned publicly on 18 August that it was easily reproducible, and began seeing in-the-wild exploitation across its own honeypot network on Wednesday 19 August. Switzerland's NCSC revised its advisory on 2026-08-21 from an unknown exploitation status to actively exploited. The hunt string watchTowr published is the GraphQL directive the flaw abuses.
  3. 034.4.20 fixed a flaw in every version; 4.4.21 fixed a second one in 4.4.20 itself, with no identifier to track it by. SPIP, the content-management system behind a large share of French government, municipal and institutional websites, published critical security releases on 17 and 20 August 2026. Each fixes what its maintainers describe in identical words as an unconditional, no-prerequisites pre-authentication remote code execution flaw, each was reported anonymously through France's national cybersecurity agency, each is explicitly not covered by SPIP's own built-in request-filtering layer, and for each the vendor states exploitation attempts have already been observed in the wild. The first is CVE-2026-77647, affecting all versions before 4.4.20. The second, scoped by the vendor to 4.4.20 itself, has no CVE identifier at all — so a vulnerability-management process driven by CVE feeds cannot see the newer of the two.
  4. 04The fixed-firmware table runs to nineteen rows, and two units sharing a model name need different builds. TP-Link's advisory of 2026-08-20 discloses a pre-authentication OS command injection in Omada gateways configured as an OpenVPN server (CVE-2026-19586, CVSS 4.0 9.3), alongside a cleartext dynamic-DNS credential transmission (CVE-2026-19683, 6.3) and an unauthenticated captive-portal session termination (CVE-2026-9033, 6.0). Exploitation of the command injection requires the OpenVPN Server feature to be enabled and reachable, and no source states whether it is on by default. The vendor's own remediation table covers nineteen rows across eighteen model names — including two hardware revisions of the one repeated name that need different fixed builds — and its stated interim workaround is to disable the OpenVPN Server feature or restrict the service to trusted source addresses. No exploitation, scanning or public proof-of-concept is reported by any source.
01Active threats, incidents & disclosures2 items
NOTABLENATOA2

Kairos claims 77.6 GB from a second Madrid-region municipality in three months, and the town hall confirms a security incident while stating it cannot yet confirm that any data was actually accessed or taken

The Ayuntamiento de Velilla de San Antonio, a municipality in the Community of Madrid, states it has detected a security incident that could have allowed the exposure of certain information held in its computer systems, and is explicit about the limits of what it knows: the investigation remains open and, for now, it cannot be confirmed that effective access to or extraction of data has occurred (Ayuntamiento de Velilla de San Antonio, 2026-08-21). Work is under way to determine the scope and nature of the potentially affected information, municipal services have not been affected and continue to operate normally, the matter has been notified to the National Cryptologic Centre and other competent authorities, and the Community of Madrid's cybersecurity agency has offered technical and coordination support under the regional incident-response model (Ayuntamiento de Velilla de San Antonio, 2026-08-21). Against that carefully bounded statement sits the actor's claim: the extortion group Kairos says it accessed the municipal infrastructure and took 77.6 GB, and per the group's own published list the files would include administrative and personnel records, officially signed electronic documents, municipal motions, personal data and national identity documents (EscudoDigital, 2026-08-21). Nothing in that list is confirmed by anyone but the group claiming it.

Kairos is already in this store as a data-theft-only extortion brand, with no encryptor ever confidently linked to it, and the outlet's description of the model matches: the attacker enters the organisation, locates information of interest, copies it, and then threatens to publish it if the victim does not pay (EscudoDigital, 2026-08-21). The same outlet reported a Kairos claim against another Madrid-region municipality, Valdemoro, in May 2026, of 1.8 TB said to include police reports, citizens' identity documents and administrative files, following an incident that town hall acknowledged on its own website as having been detected on 5 May and having affected its servers (EscudoDigital, 2026-05-12). That earlier report is internally inconsistent in a way worth flagging rather than averaging: its headline frames the Valdemoro case as ransomware, while the background it carries on the same page describes Kairos as a group focused on data theft without encryption. Two Madrid-region town halls claimed by the same brand inside four months is a pattern worth naming, and the outlet is careful about how far it can be pushed: it says the coincidence of attacker and geography makes the Velilla case particularly relevant but does not on its own establish any relationship between the two incidents (EscudoDigital, 2026-08-21). No access vector has been disclosed for either case.

El Ayuntamiento de Velilla de San Antonio ha detectado una incidencia de seguridad que podría haber permitido la exposición de determinada información alojada en sus sistemas informáticos.

La investigación continúa abierta y, por el momento, no se puede confirmar que se haya producido un acceso o extracción efectiva de datos.

La incidencia no ha afectado a la prestación de los servicios municipales, que continúan funcionando con normalidad.

La Agencia de Ciberseguridad de la Comunidad de Madrid ha ofrecido su apoyo técnico y de coordinación al Ayuntamiento en el marco de sus competencias, de acuerdo con el modelo regional de respuesta ante incidentes.

Ayuntamiento de Velilla de San Antonio 2026-08-21

Según la información difundida por el grupo, entre los archivos supuestamente obtenidos figurarían registros administrativos y de personal, documentos oficiales firmados electrónicamente, mociones municipales, datos personales y documentos nacionales de identidad (DNI).

La coincidencia del grupo atacante y de la localización geográfica convierte el caso de Velilla en una reivindicación especialmente relevante, aunque no permite establecer por sí sola ninguna relación entre ambos incidentes.

EscudoDigital 2026-08-21
incident22 Aug 05:09Zmulti-sourceOpen finding ↗
NOTABLENATOC2

A malware stager is reading its next instruction out of an FTP server's pre-login greeting — and the researchers who found it point out this is the rare command channel that is easier to catch, not harder

SOCRadar's Threat Research Unit documents a delivery chain whose novelty is where the stager gets its orders. A dead-drop resolver is a legitimate service abused to hold the attacker's addresses or commands so the delivered payload never carries them itself; the channels defenders have learned to watch are code-hosting and social platforms, DNS records and blockchain transactions. Here the stager reads its next instruction from the greeting text an FTP server sends before login — the pre-authentication banner. That evades the inspection, reputation and takedown machinery built for the other channels for a simple structural reason: an FTP handshake's opening response is normally treated as connection metadata rather than as content to inspect, and it is retrieved without ever authenticating, so no credential or session artifact is produced. SOCRadar establishes the technique has been in use since early July 2026 with new infrastructure as recently as August 2026, names two previously undocumented remote-access trojans it found delivered this way, and assesses them as separate clusters sharing one delivery technique with insufficient evidence for attribution (SOCRadar, 2026-08-21).

The most useful sentence in the report is the one arguing against its own headline. SOCRadar states plainly that this method is less stealthy than traditional web-based resolvers, because security teams are more likely to flag FTP connections to unknown servers as anomalous (SOCRadar, 2026-08-21). That is worth taking at face value. The reason web-service resolvers are hard to catch is volume: an endpoint reaching a major code-hosting or video platform is indistinguishable from a million legitimate requests. An endpoint opening an FTP control connection to an arbitrary internet host, in a modern enterprise, is close to unheard of. This is a novel channel that happens to be a better detection opportunity than the one it replaces, which is not the usual direction of travel.

The signature-trust lesson in the first implant generalises well past this campaign. E4del abuses how Electron desktop applications are built: the application's own JavaScript logic does not live inside the signed executable but in a resource archive beside it. The actors ship a legitimate, digitally signed vendor executable — a widely used chat client — along with the runtime libraries it expects, and replace the contents of that resource archive with their own code. SOCRadar's description of the consequence is the point: the operating system identifies a digitally signed binary loading trusted dependencies, masking the malicious code residing in the replaced application logic (SOCRadar, 2026-08-21). No signature is broken or forged, and the process name, publisher and certificate all check out against an allowlist. Any signed application that hosts an interpreter and loads its logic from a sibling resource file inherits the same weakness. The behavioural discriminators SOCRadar surfaces are what a defender can actually use: the implant runs the host application with switches that suppress any window, so a chat client is resident with no interface ever drawn; it enumerates installed security products before beaconing; it refuses to run unless invoked with an argument matching the intended victim's username, which is an anti-analysis check and also a reason a sandbox verdict may come back clean; and it persists by registering the signed host binary as a login item rather than dropping anything new. The second implant, PINHOLE, is built for endpoint-sensor evasion — recovering syscall numbers from neighbouring unhooked functions to issue direct calls, keeping only a small slice of its payload resident in memory at a time, and injecting its final stage into a suspended standard Windows interface-host process — and holds its command-and-control configuration in ordinary consumer web platforms rather than on infrastructure that can be taken down.

two previously undocumented Remote Access Trojans (RATs), which we have named E4del and PINHOLE

this method is less stealthy than traditional web-based DDRs, as security teams are more likely to flag FTP connections to unknown servers as anomalous.

the operating system identifies a digitally signed Discord.exe loading trusted dependencies, effectively masking the malicious code residing in app_bootstrap/index.js.

SOCRadar Threat Research Unit 2026-08-21
threat22 Aug 05:11Zsingle-sourceOpen finding ↗
HIGHCVE-2026-77647exploitedNATOA2

SPIP shipped two emergency releases in three days, each fixing an unconditional pre-authentication RCE the vendor says is already being exploited — and only the first one has a CVE

SPIP's maintainers published a critical security release on Monday 17 August 2026 and another on Thursday 20 August. The release notes describe their respective flaws in near-identical language, and the wording is unusually unhedged for a vendor bulletin: 4.4.20 fixes an unconditional, no-prerequisites pre-authentication remote code execution vulnerability affecting all versions of SPIP (SPIP, 2026-08-17), and 4.4.21 fixes an unconditional, no-prerequisites pre-authentication remote code execution vulnerability affecting version 4.4.20 — the release that had just shipped three days earlier (SPIP, 2026-08-20). Both notes then carry the same follow-on sentence word for word: the flaw is not handled by the security screen, it is imperative to update the site very quickly, and exploitation attempts have already been observed in the wild. The security screen — SPIP's own request-filtering layer, which many administrators treat as a standing compensating control against exactly this bug class — is therefore ruled out by the vendor as a mitigation for both. Both were reported anonymously through France's national cybersecurity agency, and the earlier one credits a researcher by handle for help with the analysis and the fix (SPIP, 2026-08-17).

Only the first of the two has an identifier. CVE-2026-77647 is the 4.4.20 fix: the EU vulnerability database record cites that release note directly, bounds the affected range as everything below 4.4.20, scores it CVSS 3.1 9.8 with an EPSS of 0.82, and states in its own description that the flaw is exploited in the wild in August 2026 (ENISA EU Vulnerability Database, 2026-08-20). Its published root cause is incorrect identification of PHP open tags combined with a value-exporting function's mishandling of certain cases such as the presence of a < character (ENISA EU Vulnerability Database, 2026-08-20). The 4.4.21 flaw has no CVE, no CWE and no published root cause; CERT-FR relayed it as an advisory the following day, recording remote code execution as the risk, giving the affected range as all versions before 4.4.21, and attributing the active-exploitation statement to the vendor rather than asserting it itself (CERT-FR, 2026-08-21). Whether it is a bypass of the fix that shipped three days earlier or an independent flaw of the same shape is not something any source says, and this entry does not guess.

Triage: a public CMS receives constant automated probing, so request volume and 404 noise separate nothing. The discriminator is what happens after a request rather than the request itself — a web-server worker process spawning a shell or interpreter child, or a file appearing under the document root whose modification time matches no deployment, upgrade or editorial action. On a platform this widely deployed across French-language public administration, and with the earlier flaw's CVE record already recording in-the-wild exploitation, the base rate for that sequence being benign is low.

Cette version corrige une vulnérabilité universelle (sans conditions) pré-authentification RCE qui touche toutes les versions de SPIP.

SPIP (4.4.20 release note)

Cette version corrige une vulnérabilité universelle (sans conditions) pré-authentification RCE qui touche la version 4.4.20 de SPIP.

SPIP (4.4.21 release note)

Systèmes affectés SPIP versions antérieures à 4.4.21

L'éditeur indique que cette vulnérabilité est activement exploitée.

CERT-FR / ANSSI 2026-08-21

SPIP before 4.4.20 allows unauthenticated remote attackers to execute arbitrary code, as exploited in the wild in August 2026.

ENISA EU Vulnerability Database 2026-08-20
vulnerability22 Aug 05:07Zmulti-sourceOpen finding ↗
NOTABLECVE-2026-53413 +2NATOA1

Zoomsday — the Zoom client build that closes the first two annotation flaws leaves the third open, and the national advisory that raised the alarm covers only one of the three

Belgium's Centre for Cybersecurity issued a Patch Immediately advisory on 2026-08-20 for CVE-2026-53413, stating that successful exploitation could allow an attacker participating in a meeting to execute arbitrary code on another participant's device, without requiring them to click a malicious link or download a file (CCB, 2026-08-20). The flaw sits in the Zoom client's annotation feature. Zoom describes it as a missing bounds check in the annotator function that allows a buffer over-write, and the researcher who disclosed it published the mechanism: the deserializer reads a per-buffer character count as a 32-bit value taken straight off the wire into a fixed 128-byte buffer, with no bounds check to stop the count exceeding the buffer length (Zoom PSIRT, 2026-08-11; A Security, 2026-08-11). Zoom shipped the client fix on 2026-06-22 and a server-side mitigation on 2026-07-15, and disclosed publicly on 2026-08-11 (A Security, 2026-08-11). No party — not Zoom, not Belgium's CCB, not the researcher — reports exploitation in the wild.

The reason this is still worth an entry nine days after disclosure is a patch-floor split that a single combined version table hides. Zoom publishes one bulletin per identifier, and reading all three shows that the annotation component yielded a third flaw: CVE-2026-53415, a use-after-free in the same function, also scored 8.3, which Zoom describes in the same terms — a meeting participant achieving remote code execution on another participant (Zoom PSIRT, 2026-08-11). Its fixed-version table is higher than its siblings': Workplace, Rooms and the Meeting SDK at 7.1.5 rather than 7.1.0, and the Video SDK at 2.6.5 rather than 2.6.0 (Zoom PSIRT, 2026-08-11), against the 7.1.0 and 2.6.0 floors that close CVE-2026-53413 and the denial-of-service CVE-2026-53414 (Zoom PSIRT, 2026-08-11, Zoom PSIRT, 2026-08-11). An organisation that standardised on the 7.1.0 line — the version the widely reported CVE names — has closed two of the three and left the use-after-free open. Belgium's advisory does not surface this, because it addresses CVE-2026-53413 alone and never mentions the other two identifiers.

Two caveats belong on the record. Zoom's own CVSS vectors for both code-execution flaws carry UI:R, user interaction required, which contradicts the zero-click framing in the advisory's title and the researcher's own summary; no source explains the discrepancy, and this entry does not invent a reconciliation for it. And CCB's advisory carries the reminder that matters most for a two-month-old client bug: patching to the newest version may protect against future exploitation but does not remediate historic compromise (CCB, 2026-08-20).

Missing bounds check in the annotator function of Zoom Clients allows buffer over-write, which may allow a meeting participant to achieve remote code execution of another participant via network access.

Zoom PSIRT (ZSB-26015) 2026-08-11

Use after Free in the annotator function of Zoom Clients may allow a meeting participant to achieve remote code execution of another participant via network access.

Zoom PSIRT (ZSB-26017) 2026-08-11

Successful exploitation could allow an attacker participating in a meeting to execute arbitrary code on another participant's device, without requiring them to click a malicious link or download a file.

While patching appliances or software to the newest version may protect against future exploitation, it does not remediate historic compromise.

Centre for Cybersecurity Belgium 2026-08-20

Each count is a 32-bit value taken straight off the wire, and each buffer is a fixed 128 bytes. There is no bounds check to stop a count from exceeding the buffer length.

No click, no download, and nothing required of the victim but being in the meeting.

A Security 2026-08-11
vulnerability22 Aug 05:03Zmulti-sourceOpen finding ↗

Three new PTC Windchill and FlexPLM CVEs land on the product line already under mass extortion — all three unauthenticated and flagged red by the vendor, and only one has a fixed version anyone outside PTC's login wall can find

PTC assigned three CVEs against Windchill and FlexPLM on 2026-08-20, and BSI CERT-Bund relayed them the same day. All three are network-reachable and need no authentication in PTC's own published vectors. CVE-2026-77644, scored 9.3, is described as a critical access-control bypass in the Windchill Risk and Reliability Enterprise Edition module, classified as missing authentication for a critical function. CVE-2026-77645, scored 9.2, is described as a critical remote code execution in Windchill and FlexPLM which the advisory says may be exploited through the deserialization of untrusted data — though its own weakness classification is improper input validation, with the deserialization mechanism appearing in the description text rather than as a second formal class. CVE-2026-77646, scored 7.7, is a server-side request forgery in Windchill PDMLink and FlexPLM reachable by the same deserialization mechanism (BSI CERT-Bund, 2026-08-20; GitHub Security Advisory, 2026-08-20). All three carry a provider urgency of red in PTC's own published vectors.

The remediation gap is the operational story, and it is a publication problem rather than a research one. All three advisory records were filed with no structured product or version data — the affected-versions and patched-versions fields are empty, which is PTC's own choice of record type rather than an artefact of how they were read. PTC's own support articles carry the real build numbers and sit behind an authentication wall. The one exception came from an unexpected direction: BSI CERT-Bund's structured advisory copy binds CVE-2026-77644 to Windchill Risk and Reliability Enterprise Edition below 13.1.0.1 and names 13.1.0.1 as the remediating version (BSI CERT-Bund, 2026-08-20). For the other two, the German CERT's record references only version-less product identifiers, so there is no public answer to "is my instance affected?" for either the unauthenticated code execution or the request forgery. For an asset owner that is a worse position than a high score: a CVSS 9.2 with no version boundary cannot be triaged, only assumed.

The context a reader will supply themselves needs stating carefully. This pipeline has covered a mass-extortion campaign against internet-exposed Windchill and FlexPLM deployments since late July, including the reverse-engineering of a purpose-built implant found on compromised instances, all of it anchored to a different flaw. A targeted check this run found no source connecting any of these three new identifiers to that campaign, and the campaign's exploited vulnerability remains the earlier one. Three unauthenticated flaws arriving on a product line under active mass exploitation is a reason to move, but it is not evidence that these particular flaws are being used, and this entry does not imply otherwise.

Builds on: 2026-08-19/clop-windchill-custom-implant-reverse-engineered · 2026-08-15/clop-windchill-philips-shell-first-victim-confirmations

vulnerability22 Aug 05:12Zsingle-sourceOpen finding ↗

TP-Link's advisory of 2026-08-20 covers three flaws in the Omada gateway line, its small-business and branch-office routing and firewall platform, and the one that decides the patch sequence is CVE-2026-19586. The vendor states the flaw is a pre-authentication OS command injection in gateways configured to operate as an OpenVPN server, caused by insufficient validation of client-supplied data during OpenVPN connection establishment, letting an unauthenticated remote attacker supply crafted input that influences backend command execution logic before authentication completes (TP-Link PSIRT, 2026-08-20). Its own score is CVSS 4.0 9.3 with the vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L — network-reachable, no attack requirements beyond reachability, no privileges, no user interaction (TP-Link PSIRT, 2026-08-20). The two lesser flaws are worth knowing but do not drive the timeline: CVE-2026-19683 (6.3) has the gateway transmitting dynamic-DNS authentication credentials in the clear, and CVE-2026-9033 (6.0) lets an unauthenticated attacker with network access to the captive-portal service terminate active sessions or clear all of them, scored for adjacent-network access rather than open internet reach (TP-Link PSIRT, 2026-08-20).

Two properties of the disclosure matter more than the score. The first is the precondition, which the vendor states explicitly: exploitation requires the OpenVPN Server feature to be enabled, the VPN service to be reachable by the attacker, and the attacker to be able to initiate an OpenVPN connection attempt (TP-Link PSIRT, 2026-08-20). That is a real narrowing — a gateway with no OpenVPN server configured is not exposed to this bug — but on a device class bought precisely to terminate branch and home-office VPN tunnels, it is not a narrowing anyone should assume applies to their estate without checking. Neither the vendor nor BSI states whether the feature ships on or off by default, so the size of the exposed population is not knowable from the disclosure. The second is the remediation table, which is more granular than the model list in the CVE records: the vendor names nineteen rows across eighteen model names, and on the one name that repeats the fixed build differs by hardware revision — ER706W-4G v1 is fixed at 1.2.6 Build 20260723 Rel.41321 while ER706W-4G v2 is fixed at 2.1.11 Build 20260723 Rel.41624 (TP-Link PSIRT, 2026-08-20). An inventory keyed on model name alone will therefore mark some units patched that are not. Several fixed builds are dated late June and July 2026, weeks before the CVE identifiers were published, so parts of an estate on current firmware may already be closed.

No source reports exploitation, scanning activity or a public proof-of-concept for any of the three, and BSI's advisory adds no exploitation claim of its own. Detection here is thin by nature and the entry does not pretend otherwise: the vulnerable code runs inside the gateway's own OpenVPN service, so the observable is on the device rather than on the wire — gateway system and VPN service logs showing OpenVPN connection attempts that fail or terminate abnormally without a subsequent authenticated session, unexpected configuration changes or administrative sessions on the gateway shortly after such an attempt, and outbound connections initiated by the gateway itself to destinations that are not its management platform, update service or configured tunnel peers. For CVE-2026-19683 the observable is different and simpler: dynamic-DNS credentials crossing a network segment in the clear are recoverable by anything with visibility on that path, so the question to answer is which segment the gateway's DDNS updates traverse and who else sits on it. Triage: failed OpenVPN handshakes are ordinary background noise on any internet-facing VPN concentrator — misconfigured clients, expired certificates and scanners all produce them — so volume alone discriminates nothing. What separates this from noise is sequence rather than count: a connection attempt in the pre-authentication phase followed by activity the gateway should not originate, whether that is a new administrative session, a configuration write, or an outbound connection to an unfamiliar destination from the device itself.

A pre-authentication OS command injection vulnerability has been identified in Omada gateways configured to operate as an OpenVPN Server due to insufficient validation of client-supplied data during OpenVPN connection establishment. An unauthenticated remote attacker may provide specially crafted input influencing backend command execution logic before authentication completes. Exploitation requires the OpenVPN Server feature to be enabled, VPN service must be reachable by the attacker, and the attacker must be able to initiate an OpenVPN connection attempt.

If immediate firmware upgrade is not possible, users should disable the OpenVPN Server feature until the fixed firmware can be applied.

An unauthenticated attacker with network access to the captive portal service of an affected device can terminate active captive portal sessions, including forcing logout of specific users or clearing all active sessions.

TP-Link / Omada Networks PSIRT 2026-08-20
vulnerability22 Aug 04:58Zmulti-sourceOpen finding ↗
03Updates to prior coverage1 item
HIGHCVE-2026-19478exploitedupdateNATOB1

UPDATE — GitLab's unauthenticated GraphQL flaw is being exploited two days after its patch, reproduced from the advisory and the patch alone, and Switzerland's NCSC has flipped its status to actively exploited

UPDATE · originally covered CVE-2026-19478 — GitLab ships an out-of-band critical patch for a GraphQL directive flaw that lets an unauthenticated caller modify or delete public projects and user data (CVSS 9.4) (2026-08-19)

the exposure has moved from disclosed to exploited, and the interval is the finding. GitLab patched CVE-2026-19478 on 2026-08-17 in 19.2.4, 19.1.6, 19.0.8 and 18.11.11, and the original entry recorded that no party reported exploitation and that GitLab was withholding technical detail for 90 days. The research firm watchTowr states that despite no public exploit code being available, it reproduced the vulnerability within minutes of its disclosure armed only with the advisory details and the patch (SecurityWeek, 2026-08-20). Its reproducibility warning came on 18 August, one day after the patch; on Wednesday 19 August it began seeing in-the-wild exploitation of the vulnerability across its honeypot network (CSO Online, 2026-08-19). Switzerland's NCSC, which had carried the flaw with an unknown exploitation status since 18 August, revised its advisory on 2026-08-21 to record it as actively exploited, citing the reporting of those detections (NCSC Switzerland, 2026-08-21). Withholding the technical detail bought GitLab's self-managed estate one day.

Two corrections to the original entry's mechanics, both from the sources above. The flaw is a code-injection issue reached through a GraphQL directive — the @-prefixed construct the published hunt string @gl_introduced is an instance of — and not, as the earlier framing had it, a query alias; GitLab's own statement and the independent reporting both use the directive terminology (CSO Online, 2026-08-19). And the bundled second flaw CVE-2026-19650, the cross-site request forgery issue, is the one that lives in the GraphQL multiplex query handler (CSO Online, 2026-08-19) — that component belongs to the CSRF flaw, not to CVE-2026-19478, and the two mechanisms should not be merged. Newly on the record: the flaw reached GitLab privately through its bug-bounty programme rather than being found internally (CSO Online, 2026-08-19).

Whilst no public exploit code is available, WatchTowr was able to reproduce the vulnerability within minutes of its disclosure, armed only with the advisory details and patch.

SecurityWeek 2026-08-20

On Wednesday, watchTowr started seeing in-the-wild exploitation of this vulnerability across its honeypot network.

is described as a code injection issue through the GraphQL directive and was reported privately to GitLab through its bug bounty program on HackerOne.

CSO Online 2026-08-19
vulnerability22 Aug 05:08Zmulti-sourceOpen finding ↗
04Action items8 items
Verification & coverage notes1 run

2026-08-22T0410Z-intel · Opus 5 · window 50 h · 8 entries published

Verification & coverage notes

This run was overtaken, and eight of its sixteen verified entries were stood down at publish time rather than published. That is the single most important fact in this record, and everything below is scoped by it.

The fire opened at 2026-08-22T04:10Z, composed sixteen entries from twenty candidates across four surfacing passes, four scoped deep reads and one scoped recovery pass, took them through the mechanical gate and three verifier iterations, and reached its publishing chain — where the pre-push sync found that origin/main had advanced by three fires while this one sat unpublished. Wall clock from open to that discovery: about 53 hours. The container survived across two calendar days, which is why every file mtime and the composition timestamps in this record read 2026-08-22 while the publish actually happened on 2026-08-24.

By the time the merge was finished the count had risen to five: 2026-08-23T0409Z-intel, 2026-08-23T2311Z-weekly, 2026-08-24T0110Z-weekly, and then — landing while this record was being rewritten — 2026-08-21T0410Z-intel and 2026-08-24T0906Z-intel. Two of those need naming. The 2026-08-21 fire did run. This run's window was computed on the premise that it had not (hence gap_hours: 48 against a 2026-08-20 predecessor), and that premise was wrong: the 08-21 fire was itself stalled, published five entries today, and none of them overlaps the eight published here — checked on CVE ids and entity keys. The window figures in this frontmatter are left as the run computed them, because they are what it actually used; the true gap to the preceding fire was 24 h, not 48. And 2026-08-24T0906Z-intel stood itself down to zero entries for a stale clock, which is the same family of fault as this run's, caught earlier and handled better. The first of them matters most: it computed a 74 h window precisely because this fire had never published, so its window fully contained this one, and it covered eleven entries of the same ground. The W34 weekly then covered more of it again. The pipeline's own guard for this case is explicit — the overtaken run publishes only the delta the newer fires did not surface — so that is what happened here, mechanically rather than by judgement.

The dedup, and what it cost. Every one of the sixteen entries was checked against all twenty-five entries the three overtaking fires published, on CVE identifiers and on entity-registry keys, and then read where the keys were absent. Eight were duplicates and are gone:

  • trueconf-server-preauth-sandbox-escape-kev-installer → both CVEs and both entities already on 2026-08-23/trueconf-server-kev-head-mare-trojanized-installer
  • gtig-three-russian-clusters-authentication-flow-abuse → six shared entities with 2026-08-23/gtig-russia-clusters-app-passwords-whatsapp-linking. This was the run's deep_dive, so the run now ships without one
  • misp-stix-trust-decision-bypass-no-released-fix → all three CVEs on 2026-08-23/misp-stix-import-trust-boundary-dos-parser-state
  • uat-10147-spectre-callback-unlinking-linux-rootkit → both CVEs and the actor on 2026-08-23/spectre-uat-10147-byovd-edr-callback-unlink, with a companion entry covering the AI half
  • crates-io-build-script-dropper-yank-lure-arrayref2026-08-23/rust-crates-arrayref-build-script-backdoor-dprk. This is the entry the verification loop recovered as a coverage gap inside this run, and a later fire found it independently
  • cve-2026-69836-entra-id-exploited-flag-retracted-feeds-stale → same CVE on 2026-08-23/cve-2026-69836-entra-id-exploited-flag-corrected
  • btr-defender-remediation-driver-ring0-primitive-absence-tell → same research, same finding, on 2026-08-23/btr-sys-defender-remediation-driver-kernel-primitive. Neither entry carried a CVE and this run's carried no entity either, so no structured key caught it; it was caught by reading both
  • martigny-combe-valais-secretariat-mailbox-contact-fan-out → same incident, same dates, same contact count, on 2026-08-23/martigny-combe-valais-communal-mailbox-compromise. Again no key overlap: this run had registered incident:martigny-combe-email-compromise-2026-08 and the overtaking fire registered nothing, so the registry key this run created has been dropped with the entry rather than left orphaned

Two of the eight had no structured overlap at all. A CVE-and-entity dedup pass would have shipped both as duplicates; what caught them was reading the candidate against the store. That is worth carrying into the prompt, because the mechanical index is exactly what a rushed run leans on.

The eight that ship are the delta, and one of them is the reason this record is worth reading. Six are first coverage that no overtaking fire carried, and two are updates:

  • spip-two-unconditional-preauth-rce-releases-three-days-apart — untouched by any of the three fires, and the strongest item here. SPIP shipped two critical releases three days apart, each fixing an unconditional pre-authentication RCE the vendor describes in identical language, each explicitly outside the coverage of its own request-filtering layer, and each with exploitation attempts the vendor states are already being seen. Only the first has a CVE. A vulnerability-management process keyed on CVE identifiers reports the estate clean at 4.4.20 while the newer flaw is open — and 4.4.20 is precisely the release the vendor names as affected. For a French-language public-administration CMS in this constituency's region, this sitting uncovered for two days is the real cost of the stall
  • ptc-windchill-three-new-cves-unauth-rce-no-fixed-version — the W34 weekly covers the exploited older Windchill flaw and the Cl0p campaign around it; these are three new CVEs, all three requiring no privileges, with no obtainable fixed version for two of them. No overlap
  • cve-2026-19586-tp-link-omada-openvpn-preauth-injection — untouched. Pre-authentication OS command injection on an internet-facing SMB and branch-office edge line, with the vendor's own nineteen-row per-hardware-revision firmware table that no CVE record reproduces
  • zoomsday-cve-2026-53415-higher-patch-floor-than-siblings — untouched, and the finding is the patch floor: the third flaw needs a higher fixed version than the two beside it, so patching to the obvious floor leaves it open
  • ftp-banner-dead-drop-resolver-e4del-pinhole — untouched by any entry, and it was sitting on the coverage backlog, queued there by the 2026-08-24 weekly. Publishing it discharges that row, which is now annotated as such
  • kairos-velilla-san-antonio-second-madrid-municipality — untouched
  • cve-2026-19478-gitlab-honeypot-exploitation-confirmed — ships as an update_of on 2026-08-19/cve-2026-19478-gitlab-graphql-unauth-data-destruction, which is the shape it was composed in
  • 2026-08-24/cisco-crosswork-secure-workload-nine-cwe-grouped-cves — the one entry that does not live in this run's own date folder, because its discovered_at is the day the stand-down happened rather than the day the advisories were read. Reshaped during the stand-down from first coverage into an update_of on 2026-08-23/weekly-w34-vuln-status-rollup, because the weekly reached the same two advisories from a national-CERT relay and covered them CVE by CVE while this fire was unpublished. It still ships because three things in that account need correcting from the vendor's own CSAF data: the set is nine CVEs and not eight (CVE-2026-20319 is absent from the rollup's enumeration), the characterisation of the whole set as unauthenticated holds for six of the nine and not for the three carrying PR:L, and the rollup records exploitation status as unknown where Cisco states it is not aware of malicious use. The per-CVE affected and fixed release strings appear in neither the rollup nor the relay

What the verification loop is worth here, and what it is not. All three iterations ran against the full sixteen, so the eight that ship carry the same scrutiny the run recorded: three iterations across two models, twenty-eight defects found and every one remediated. What the loop cannot vouch for is the stand-down itself, which happened after the last verifier returned — no verifier read the reshaped Cisco entry in its update_of form, and no verifier checked the dedup that dropped the other eight. Both are this agent's work alone, and both are on the weekly quality audit's surface.

The publish gate was not met, and the honest version is worth stating plainly. Iteration 3 ran on Opus, re-derived iteration 2's fix independently against the entry files and the two prior run records, took a fresh read of the entries, and returned the run's first CLEAN — no truth defects, no editorial defects, three advisory items, all three of which were applied rather than left. A confirmed CLEAN needs that verdict repeated on the other model, which would have been a fourth iteration. By then the run was already hours past its guard, and the guard's instruction at that point is to land rather than spend more clock proving a verdict. So confirmation_waived is set and this run publishes without a two-model agreement on its final verdict.

The rotation pass, and an operational mistake worth writing down. Iteration 2 ran on the other model and did the two jobs the rotation exists for: it gave the recovered crates.io entry its first cold read — iteration 1 had never seen that entry, because it was composed in answer to iteration 1's own coverage finding — and it re-checked all twenty-five iteration-1 remediations against primaries it fetched again itself rather than trusting the run directory's saved copies. No remediation had regressed. It found one defect, in this record: the priority-calibration paragraph enumerated seven high entries and eight notable against an entries_published of sixteen, because it was written before the recovery and never revisited.

The mistake is mine and it belongs here. While iteration 2 was finishing I checked the run directory for its report, found a stub transcript and no findings file, concluded from that filesystem evidence that the spawn had been blocked the way the alternate verifier has been blocked on two earlier fires, and started a retry on the rotation-recovery ladder. The check had raced the agent's final writes by under a minute: iteration 2 was healthy and delivered a full report. The retry was stopped as soon as that was clear, but it had already spent several minutes of the run's clock re-verifying material iteration 2 had just verified, and it was pinned to the same model, so it could not have served as the second half of a two-model agreement even if it had finished. Two lessons: absence of output files is not evidence of a dead sub-agent while its wall-clock cap has not expired, and a recovery spawn must be checked against the rotation it is meant to preserve before it is worth starting.

The deep reads earned their cost, and two of the three findings that survive the stand-down are in entries that ship. Every published item was re-read against its primary before composition, and the four follow-up passes returned thirty-five corrections between them. The SPIP item was surfaced as one emergency release fixing one unnumbered flaw; the deep read established there were two critical releases three days apart, with the earlier one carrying CVE-2026-77647 and the later one carrying no identifier at all. The Zoom item was surfaced with a single combined patch table; the deep read found the vendor publishes one bulletin per identifier and that the third flaw needs a higher fixed version than its two siblings, so the entry's whole point became that the obvious patch floor is the wrong one. The Cisco item was surfaced as a uniformly unauthenticated set; the vendor's own CSAF vectors show six of nine unauthenticated and three requiring low privilege, and that correction is now the reason that entry ships at all.

Sourcing and single-source items (for the eight that ship):

  • Single-source, and corrected in the direction that costs a rating rather than gains one: 2026-08-22/ftp-banner-dead-drop-resolver-e4del-pinhole. The surfacing pass had this as multi-source with the relaying outlet as the researcher and the researcher as corroboration. The deep read established the opposite — the research unit did the original hunting, reverse engineering and naming, and the outlet says in its own text it is working from a report shared with it and adds no independent analysis. Two publishers of one assessment is not two sources, so the entry is single-source with the relaying outlet cited as such, and reliability follows the registry's C rating for that publisher rather than the quality of this one output.
  • 2026-08-22/ptc-windchill-three-new-cves-unauth-rce-no-fixed-version ships with an empty evidence block, deliberately and with the reason stated in the entry. The advisory records could only be read through a transport that summarises rather than returning raw text, so no quotation could be literal-checked as a contiguous substring; the entry paraphrases instead of quoting.
  • Contradictions carried rather than resolved: the Zoom flaws' provenance is contradicted three ways between the vendor's credit and two passages of the researcher's own write-up, so the entry attributes that flaw to nobody, and the vendor's own CVSS vector records user interaction as required while the national advisory's title and the researcher's framing both say zero-click — the entry states the tension rather than picking a side. For the Spanish municipal item the outlet's May reporting describes the same actor's earlier case as ransomware while its own background material describes the actor as encryption-free, and the entry says so.
  • One quote failed its own check during this run's main-agent read and is recorded because the failure mode is the pipeline's most persistent: a French quotation that looked correct had been retyped with an ordinary space where the page carries a non-breaking one, so it was not a verbatim substring. It was shortened to the fragment that literally matches. A deep-read pass independently found four more of the same class in the surfacing returns — two ellipsis splices, one tense change and one paraphrase inside quotation marks — none of which reached an entry.

Borderline drops. Each was researched and verified; each is dropped for a stated reason, not for space.

  • borderline-drop: Unit 42 identity abuse through trusted communication channels — the mechanism families it documents are ground this store already holds, and its headline content is vendor-telemetry share-of-alerts percentages of the kind this pipeline does not publish. What remains is standing hardening advice rather than something that changes a decision in the next seven days.
  • borderline-drop: leak-site claim against a Swiss datacenter naming a Zurich university of applied sciences — no victim statement, no high-reliability journalism, and every corroborating hit is another aggregator mirroring the same post. Held as a watch item rather than published on an extortion claim alone. Note for the operator: an overtaking fire published 2026-08-23/payload-zurich-it-provider-hwz-student-data, so this item did get coverage two days later from a fire that reached what this one could not.
  • out-of-window: SSD Secure Disclosure Unisoc baseband-to-application-processor chain — freshest source 2026-08-17 against a 50 h window. The transport problem that blocked it on three previous fires was solved in substance, with two outlets identified that read the advisory directly, and that is recorded in the source's notes.

Priority calibration. Of the eight that ship, four are high — SPIP's two exploited unconditional pre-auth RCEs, GitLab's move from disclosed to exploited inside two days, the PTC set with no obtainable fixed version for two of three, and the pre-authentication command injection on the internet-facing edge line — and four are notable. No entry is critical; nothing here meets that bar. The high count is not a judgement about a quieter window: it is what survived a dedup against three later fires, and the twelve-entry difference between what this fire verified and what it published is a publishing artefact, not an editorial one.

Action items. Fourteen actions across seven of the eight entries; the Spanish municipal claim ships none, carried for the pattern rather than a task. Several of them exist only because the deep reads found the obvious answer was wrong: the Zoom floor is 7.1.5 rather than 7.1.0, the SPIP floor is 4.4.21 rather than 4.4.20, and the TP-Link table is keyed on hardware revision rather than model name.

Backlog. Five rows were open when this run started and all five were worked; three overtaking fires have since added their own, and this run's late landing has been reconciled against them rather than overwriting them. The FTP-banner row the 2026-08-24 weekly opened is discharged by this run's entry and annotated in place. The two rows this run added — an npm wave whose implant triggers on module load rather than on install, and a sandbox-escape advisory in the isolation library that AI-agent platforms use to run untrusted code — stay open; both needed a primary this run never reached. The Siemens S7 row is partly discharged: this run added the standard-library PDF text-extraction path that was the row's second instruction, so re-reading that advisory's own text is now a one-command operation. On merge, entities/registry.yaml, state/cves_seen.json, state/source_health.json and sources/sources.json were taken from main rather than from this run, and only this run's genuinely-new records were re-applied on top — three registry records, eleven CVE index records and one candidate source. Resolving those files the usual way would have discarded three fires of accumulated work.

Sub-agent loss and recovery. One deep-read pass was terminated by the content-safety classifier mid-read on kernel-driver abuse material and wrote no findings. Rather than composing from surfacing summaries, it was re-spawned as two smaller passes with an explicit model override to the other model and with the defensive framing declared in the tasking before the first fetch — observability and discriminators only, no offensive procedure, no indicators. Both completed and returned 131 literal-verified quotes between them. This is a recurring rather than exceptional condition: the same class of block has cost this pipeline four research spawns on 2026-08-03 and every alternate verifier spawn on two earlier fires. The model-override ladder worked again.

Tooling: this run shipped nothing, and that is the finding. Every tooling and prompt change it made was discarded at merge time as a rediscovery of work main already carried — better, in both cases, and published while this fire sat unpublished.

It had added a standard-library PDF text-extraction path to the fetch bridge, discharging a standing backlog instruction, and bumped all three prompt banners plus a changelog entry to v3.32 for it. main's own v3.32, dated 2026-08-21 and titled for the same problem, already had one — selected on content type rather than as a fallback after failure, with ToUnicode CMap handling, extraction scoring, mirror counting, a --json mode, and explicit reporting that an image-only PDF has no text objects (which is not extractable, never says nothing). main's version was kept and this run's discarded, along with its banner bumps and its changelog entry.

The auto-merge of those two implementations produced a completely broken tools/fetch_source.py, and it looked clean. Git merged both without a single conflict marker, and the file still parsed — but it now defined pdf_text twice and registered a pdf subparser twice, so argparse raised on setup and every subcommand of the fetch bridge crashed before doing anything. Had this landed, the next fire would have had no bridge at all: no KEV, no CSAF, no PDF, no url. It was caught by running fetch_source.py pdf --help after the merge rather than by reading the diff. A clean auto-merge of two independent implementations of the same feature is not a merge, and a Python file that parses is not a working one — run the CLI.

The same pattern, one file over: this run had also fixed tools/source_health.py, where a bridge recipe's health was judged by output byte count so a valid zero-result JSON envelope read as a dead source. main already carried a fix for that defect too, from the same sec-disclosures-edgar case, published 2026-08-23 and handling three more list keys than this one. Kept main's, discarded ours.

What this run did contribute to the repo, after all that: two .gitignore rules, added when the staging review found roughly 10 MB of raw fetched bodies about to be committed under names the existing rules did not match — work/**/*.clean and work/**/kev*.json. Both names were this run's own invention, so both were its own leak to close. Plus one candidate source (tp-link-omada-psirt, with the reusable recipe for reaching a vendor SPA's per-advisory path through a national-CERT CSAF record's external-reference field), three registry records, eleven CVE-index records, and its memory notes.

Two fires independently building the same PDF transport, and two fires independently fixing the same probe defect, inside three days, is not luck — it is the backlog and the source-health sweep each describing a problem well enough that any run picks it up, with nothing anywhere saying it is already being worked. A claim mechanism on backlog rows would have saved both.

Watchlist. The profile configures no product or supplier watchlist, so both sweeps are documented no-ops and the parseable line is omitted. The region and sector lens was applied throughout, and it is what carried the SPIP disclosure and both municipal items — one of which was then stood down as a duplicate.

For the operator, two questions this run cannot answer for itself. A 53-hour container lifetime on a fire budgeted for about three is not a scope problem, and the run's own watchdog fired correctly and was obeyed; something outside the run's control kept the container alive across two days. Whether that is a scheduler condition, a container stall or a session-resume artefact is visible in infrastructure this run cannot see. And the overtake was discovered only at the pre-push sync, by which point sixteen entries had been composed, gated and verified three times — twelve of those entry-verifications were spent on material that could not publish. A cheap gap check against origin/main at each phase boundary, rather than only at Phase 6, would have caught it hours earlier.

Coverage gaps: cisa-advisories (HTTP 403, eighth consecutive run; the KEV feed covered the exploited-vulnerability surface, the advisory surface again not); cisa-directives (HTTP 403, seventh consecutive run); ncsc-uk (essential-tier source not reached — the home-region pass spent its clock on the Berlin chase and its three composed items); ccn-cert-es (rotation-priority source not attempted, and a Spanish municipal incident published this run, so the gap had a cost); siemens-productcert-csaf (HTTP 403, fifth consecutive run; CSAF mirror checked, nothing in-window lost); ssd-disclosure (anti-bot shell, fifth consecutive failure, resolved in substance via substitute primaries); github-advisories (anti-bot on both the HTML and API paths); ptc-support-portal (login-gated, and it holds the fixed builds for two published CVEs); acronis-tru, ahnlab-asec (HTTP 403); paradigm-shift-research (client-rendered shell, reader-dependent); cnil-fr (listing renders stale rather than quiet — flagged for a recipe check).

Essential-coverage: missed=cisa-advisories (HTTP 403 on every transport), cisa-directives (HTTP 403 on every transport), ncsc-uk (not attempted — sub-agent clock).