Security daily

Synthesized by Clarity (Claude) from 10 sources · May contain errors — spot one? [email protected] · Methodology →

Adform Ad Tag Swaps Wallet Addresses After Delivery, No Logs

Sources
10
Words
1,676
Read
8min

Topics AI Regulation Agentic AI AI Capital

◆ The signal

Origin servers returned clean HTML the whole time. The rewrite happened after delivery, inside the vendor's script, so no access log and no WAF entry records it. The vendor caught it July 27 and cannot date the start, which leaves whatever edge-log retention you happen to have as the entire investigation.

◆ INTELLIGENCE MAP

Intelligence map

  1. 01

    Poisoned Ad Tag Rewrote Wallet Addresses Client-Side

    act now

    The Hacker News reports attackers poisoned a JavaScript file served by adtech vendor Adform, turning it into browser-side code that rewrote cryptocurrency wallet addresses on downstream customer sites. Adform detected it on July 27; how long the poisoned build was live is unknown. Your own servers stay clean in this attack class, so no web server or WAF log records it and edge logs are the only evidence. Any page you render that displays a payment destination is in scope.

    July 27
    when the vendor caught it
    1
    source
    • Victim servers
    • Dwell time
    1. Before Jul 27Poisoned Adform tag served on downstream customer sites
    2. Jul 27, 2026Adform detects the wallet-address rewriting
    3. NowRetro-hunt bounded by your CDN and edge log retention
  2. 02

    Unauthenticated RCE in Adobe Campaign Classic and TeamCity

    act now

    Adobe fixed a CVSS 10.0 flaw in Campaign Classic that executes arbitrary code with no user interaction, which means unauthenticated and network-reachable, per The Hacker News. CSO Update separately flags a critical pre-authentication flaw in self-hosted JetBrains TeamCity, where a crafted HTTP request yields command execution and credential exposure. Both platforms usually sit outside the patch SLA: marketing operations owns one, and the other is a self-hosted build server frequently missing from asset inventory.

    10.0
    CVSS on Campaign Classic
    2
    sources
    • User interaction
    • TeamCity auth
    1. Adobe Campaign ClassicCVSS 10.0, no user interaction
    2. JetBrains TeamCity (self-hosted)Critical, pre-authentication
  3. 03

    A Cloud Key Bug You Had No Way to Patch

    background

    Wiz found a logic bug in Azure Cosmos DB that exposed customer database access keys across tenants, and Microsoft took eight months to ship the fix, per CSO Update. No customer configuration could have closed that window; there was nothing to patch on your side. Treat hyperscaler patch velocity as a risk input you model rather than manage, and delete the credential class instead of rotating one key.

    8 months
    provider-side fix window
    1
    source
    • Finder
    • Customer fix
    1. Provider fix window8 months
    2. Customer remediation availableNone
  4. 04

    Meeting Capture With No Bot and No Banner

    monitor

    Granola captures Zoom and Google Meet audio without joining the call as a participant and without raising a recording banner, per The Information. Its new Apple Watch app went viral, and the company's own telemetry shows 40% of its iOS users already own a Watch. A second product, Jamie, markets the same property outright: you join the meeting, the bot does not. Every control you own for AI notetakers assumes a bot in the attendee list, so the meeting platform never emits an event you could alert on.

    2
    sources
    • Granola valuation
    • Headcount
    1. Granola iOS users who own an Apple Watch40
  5. 05

    Autonomous Exploitation Tooling Went Commodity

    background

    Unit 42 documented a Chinese-speaking actor driving DeepSeek through the open-source Hermes Agent framework. After one instruction over Telegram, the agent found internet-facing targets and attacked with no further human input. Separately, an autonomous exploitation engine called Dark-Moon now ships under GPL-3.0 with real exploit execution against web, cloud and Active Directory. Exposure you create on Monday can be found the same day, which retires monthly attack surface scanning.

    2
    sources
    • Human in the loop
    • Operator channel

◆ DEEP DIVES

Deep dives

  1. 01

    The Wallet Address Your Page Rendered Was Not the One You Sent

    act now

    Why nothing in the estate recorded it

    The malicious logic executed in the visitor's browser. The origin server returned exactly the HTML it was built to return, and the poisoned code arrived afterward, inside an asset the page was configured to fetch from the vendor. Nothing on the origin changed, so no access log, WAF decision, or file-integrity check on the web root shows a deviation. One class of telemetry can place a malicious script version in front of a real user: the CDN or edge log recording which asset was served. Those are typically the shortest-retained logs in the estate.

    The wallet theft is not the operational problem. A vendor's detection date marks the end of an incident, never the beginning. If the poisoned build was live for longer than edge retention, the honest answer to "were our customers affected" is unknown. Unknown is the answer that goes to counsel, to the payments partner, and to any regulator who asks.


    The applicable controls are integrity controls, not detections

    There is no alert to tune here. What holds is Content Security Policy in enforce mode with a strict script-src allowlist, Subresource Integrity on every static third-party asset, and origin isolation for adtech tags that require dynamic loading and therefore break SRI. A sandboxed iframe or a separate origin, so the tag cannot read or mutate the main document.

    One control matters more than all of those and almost nobody runs it. A synthetic check that loads the page the way a customer does and asserts that the rendered wallet address, IBAN, or payment destination matches the value the backend intended. Substitution attacks throw no exception and fail no transaction. They run until someone complains about money.

    An address-substitution attack produces no failed transaction. The first evidence is a customer who paid someone else.

    The CVSS 10.0 in the same batch, and why it sits outside the SLA

    Adobe Campaign Classic is the patch that should move out of band. A perfect score with no user interaction implies a network-reachable, unauthenticated code execution path. Campaign Classic holds customer contact and behavioral data and owns a trusted outbound mail channel, so one compromise yields both a PII store and a way to send mail customers will open. Marketing operations owns the platform in most companies, which is exactly why it is absent from the patch calendar. Take the inventory from marketing directly rather than the CMDB, and pull the CVE and affected build range from Adobe's advisory. The reporting names neither.


    Where the sources converge

    Techpresso reported AI vendors discovering their own agent escapes months later through retrospective log review. Set that beside this incident and one property repeats across otherwise unrelated stories: the vendor finds the failure, the vendor dates it, and your evidence window is shorter than their dwell time. CSO Update frames that class as a shared-responsibility problem. The Hacker News frames it as third-party script risk. Neither addresses the variable actually under defender control, which is retention. Extending edge and CDN log retention is unglamorous work. It decides whether the next vendor disclosure produces an investigation or a shrug.

    Action items

    • Enumerate every third-party script loading on customer-facing pages by end of week, confirm whether an Adform tag is present, and document the exact date range your CDN and edge logs still cover.
    • Patch Adobe Campaign Classic out of band after pulling the CVE and affected build range from Adobe's advisory, then hunt for webshells in the web root and new outbound connections from the application service account.
    • Ship a synthetic canary this sprint on every page that renders a wallet address, IBAN, or payment destination, asserting the rendered value matches the backend value and alerting on mismatch.
  2. 02

    Assume Every Secret Your Build Server Held Is Already Public

    monitor

    Patching is the smaller half

    Pre-auth means no credential was required. CSO Update describes a crafted HTTP request against self-hosted JetBrains TeamCity producing arbitrary command execution and credential exposure. Self-hosted CI is trivially fingerprinted from the internet. Earlier TeamCity pre-auth bugs went from disclosure to mass exploitation in days. The working assumption for any server reached before the patch is that the attacker holds every secret it ever stored: VCS tokens, cloud credentials, artifact registry keys, code-signing material, and agent authentication tokens.

    Rotation is the incident response. The patch only closes the entry path. Rotation alone has a gap worth naming, because a build configuration is itself a persistence mechanism. A modified build step re-harvests whatever gets rotated on the next pipeline run, and it reads as ordinary CI activity in every log available. So the rotation ships alongside an audit of roughly 30 days of build-config changes and agent registrations, looking for entries nobody can attribute to a named person.


    The cloud half has no patch column

    Wiz's Azure Cosmos DB finding is the cleaner version of the same lesson. A provider-side logic bug exposed customer database access keys across tenants. The fix took eight months. During that window no customer setting, no scanner, and no patch cycle changed the outcome. Rotating primary and secondary keys is the floor. The durable move is to stop holding the credential class that leaks: set disableLocalAuth, move applications to Entra ID RBAC with managed identities, and put private endpoints or IP firewalling in front of the account.

    Then instrument it. Streaming DataPlaneRequests diagnostics into the SIEM with an alert on anomalous read volume turns the next provider-side key bug from a silent cross-tenant read into a failed authentication event that shows up in a queue.

    Patching a pre-auth flaw on a build server closes the entry path and does nothing whatsoever about the secrets that already left.

    Three exposures, one credential class

    ExposureCan you patch it?What rotation fixesWhat removes the class
    Self-hosted TeamCity, pre-auth RCEYesStolen tokens, keys, signing materialShort-lived per-job credentials; CI off the public internet
    Azure Cosmos DB key exposureNo — vendor-fixed after eight monthsThe specific leaked keysdisableLocalAuth plus Entra ID RBAC with managed identities
    Long-lived ML registry tokensPartly — your tokens, their platformWrite access held by a compromised grantOrg-wide 2FA, scoped tokens, internally mirrored artifacts

    Techpresso's guidance to rotate every Hugging Face token and enforce org-wide 2FA is the same instruction aimed at the ML supply chain instead of the build chain. The a16z discussion adds a reason to keep the receipts: with developer liability a live US policy argument, signed build attestations stop being engineering hygiene and start being evidence. Neither report names a CVE, CVSS score, or fixed build for TeamCity. The JetBrains bulletin is the authority before anyone writes the change ticket.

    Action items

    • Patch every self-hosted TeamCity instance to the fixed build, then rotate VCS tokens, cloud credentials, registry keys, code-signing material, and agent tokens the server touched.
    • Audit 30 days of TeamCity build-config changes and agent registrations for unattributable entries before closing the incident ticket.
    • Rotate Cosmos DB primary and secondary keys, then set disableLocalAuth and migrate applications to Entra ID RBAC with managed identities this quarter.
  3. 03

    The Recording Banner Was Your Only Detection Control

    monitor

    The control you thought you had

    Every mainstream control for AI meeting assistants assumes a bot-in-the-meeting architecture: tenant settings that block third-party participants, participant-list review, and training that says look for the banner. All three are inert against capture that happens locally. There is no participant to block, no banner to notice, and the meeting platform never writes an audit event. The admin console reports a clean quarter while the transcripts accumulate somewhere else.

    The corroboration is what makes this a category rather than a vendor story. Granola's differentiator is documented as consent-UI evasion, and per the reporting, no one in a Google Meet would know it is being used. A separate tool, Jamie, sells on the same line: you join the meeting, the bot does not. Two independently marketed products, one shared property, and it is the property the policy depends on detecting.


    Where the evidence actually lives now

    Capture vectorConsent signal generatedWhere it is observableYour control point
    Native Zoom or Meet AI notesBanner plus audit logMeeting platform admin consoleTenant policy — fully governable
    Desktop notetaker synced to the callNonemacOS TCC microphone grants; OAuth calendar grantEDR, MDM app policy, OAuth consent workflow
    Watch app on a paired phoneNoneNowhere on BYOD; install record on managed phonesManaged-app policy on the paired phone only
    Dedicated recorder hardwareNoneNowhere in the technical stackPhysical security and device policy

    The wrist app is the friction change that matters. Activation effort was the last informal control keeping shadow recording rare, and Granola's own usage data has the watch app beating the iPhone app because, per its co-founder, out of sight means out of mind. The same app handles in-person meetings, which puts the board room, the HR investigation, and the incident-response bridge inside scope as capture surfaces.


    The archive is the target, not the app

    Model the threat on the artifact. An employee's notetaker account is a structured, searchable corpus of internal meetings: deal terms, roadmap decisions, named individuals, secrets read aloud on calls, and raw audio suitable for voice cloning. That is richer reconnaissance and social-engineering material than the same employee's mailbox, and it sits with a vendor procurement never onboarded. An account-compromise playbook scoped to email and chat closes the case with the highest-yield data store untouched.

    The second source sharpens the downstream half. Synthetic voice is now described as practically indistinguishable, and marketplaces are paying people to license their likeness at scale. Meeting audio of executives is training data. The service-desk heuristic of recognizing a familiar voice, and any voiceprint factor still in production, are deprecated controls rather than fallbacks.


    Vendor reach has outrun vendor maturity

    Granola was founded in 2023 and raised at a $1.5B valuation in March 2026 from Index Ventures and Kleiner Perkins, with headcount roughly quintupled to about 100 people and no security posture disclosed anywhere in the coverage. The user base skews to VCs, founders, and executives, which makes one vendor compromise an aggregation of deal flow and an attractive collection platform for an espionage-motivated actor. The diligence asks are specific: SOC 2 Type II, a DPA, subprocessor disclosure naming which model provider processes the audio and whether it trains on it, retention and deletion controls, residency, and a breach notification SLA.

    Prohibition without a sanctioned alternative produces more shadow recording, not less — one governed notetaker with the banner on by default is the floor.

    Action items

    • Run an OAuth grant audit across Google Workspace and Entra ID for calendar- and meeting-scoped notetaker apps, revoke unsanctioned grants, and enable admin consent workflow for new ones.
    • Add EDR alerting on macOS TCC microphone and screen-recording permissions newly granted to processes outside the approved list, and push the notetaker app set to the MDM restricted list.
    • Publish an AI recording policy this quarter that names prohibited meeting categories — board, privileged, HR investigation, M&A, incident response — mapped to two-party-consent jurisdictions, and add notetaker archives to account-compromise scoping.

◆ QUICK HITS

Quick hits

  • Microsoft found hijacked hotel Wi-Fi pushing fake browser updates that install CornFlake RAT

  • Chrome 149 and 150 fixed 1,072 bugs, more than the previous 23 milestones combined

  • Update: a Rockwell notice is being read backward as the correlation key for 30-plus utilities

  • Hugging Face's own breach investigation stalled on frontier-model safety guardrails

  • 84 vulnerabilities across 4G and 5G cores enable denial of service and session hijacking

  • Bitsight found cheap Android TV boxes shipping preinstalled apps that spoof flagship phone identities

  • Kubernetes v1.37 starts the clock on kube-proxy IPVS removal and cgroup v1 retirement

  • A former White House cyber official is arguing developers should carry downstream liability for their code

◆ Bottom line

The take.

Every failure worth acting on here happened in code, on hardware, or on a device your telemetry never watched, which is why each one was found by someone else and dated on someone else's clock. That breaks the assumption underneath most detection programs: that your own logs define your evidence window. Where a third party writes, serves, or records, your retention decides whether an investigation is even possible, and it is almost always shorter than the intrusion. Pick the three external dependencies whose failure you could not currently reconstruct, and build the integrity check or grant audit that would tell you, before a vendor disclosure starts the clock for you.

— Promit, reading as Security ·

Frequently asked

Why didn't our WAF or origin access logs record the wallet address swap?
Because the malicious logic executed in the visitor's browser, after the origin had already returned clean HTML. No access log, WAF decision, or file-integrity check on the web root shows a deviation, since nothing on the origin actually changed. The only telemetry that can place a poisoned script in front of a real user is the CDN or edge log — typically the shortest-retained data in the estate.
Which control stops the next poisoned vendor tag, not just this one?
A synthetic canary that loads each payment page the way a customer does and asserts the rendered wallet address, IBAN, or destination matches the backend value. Substitution attacks throw no exception and fail no transaction, so no server-side log substitutes for it. Content Security Policy in enforce mode, Subresource Integrity, and origin-isolating dynamic adtech tags form the supporting layer.
What should I do about the CVSS 10.0 Adobe bug flagged in the same batch?
Patch Adobe Campaign Classic out of band rather than in a normal maintenance window. A perfect score with no user interaction implies a network-reachable, unauthenticated code execution path, and the platform holds customer PII plus a trusted outbound mail channel. Pull the exact CVE and affected build range from Adobe's advisory, then hunt for webshells and new outbound connections from the service account.
I've patched TeamCity — is the incident closed?
No, patching only closes the entry path; rotation is the actual incident response. Assume the pre-auth flaw handed the attacker every secret the server stored — VCS tokens, cloud credentials, registry keys, and code-signing material — and rotate all of them. Then audit roughly 30 days of build-config changes and agent registrations, because a tampered build step re-harvests rotated secrets on the next run and reads as ordinary CI activity.
Why don't our meeting tenant policies detect AI notetakers anymore?
Because capture has moved to desktop and smartwatch apps, so there is no third-party bot to block and no banner to notice. Native controls assume a bot-in-the-meeting architecture; local capture leaves evidence only in macOS microphone permission grants and OAuth calendar scopes, while the meeting platform writes no audit event. Run an OAuth grant audit and add EDR alerting on newly granted microphone permissions.

◆ Same day, different angle

Read this day as…

◆ Recent in security

Keep reading.

Spot an error? [email protected]