A two-stage credential-harvesting kit whose architecture is consistent with adversary-in-the-middle session theft, delivered by mail that raw headers confirm was sent from inside a vendor tenant publishing DMARC p=reject — with the operator answering our challenge in-thread seven minutes later. Scope: one mailbox. See Section 10, "What we did not find".
Status — updated 2026-08-12: concluded on our side. On 2026-08-12 at 11:32 UTC Sand Studio published a security notice on its own domain, Security Notice Regarding Recent Phishing Incident, and told us 36 minutes later that it "is published on AirDroid's official domain and serves as our public company statement regarding the incident." That was the one thing this advisory said was missing. Every prior communication reached us through the compromised tenant itself, authenticating exactly as the phishing message did; we said on 2026-08-10 that we could not tell the vendor from the adversary on that evidence, and we declined to guess. A statement carried on a second, independently controlled surface is a different kind of evidence, and we treat it as one. We are closing our incident response. See The public notice for what it establishes, what it does not, and the two limitations we record about how it is published. No finding, indicator or conclusion in this advisory has been changed at any point in this exchange. The scope limitation in Section 10 stands exactly as written: we established that one mailbox was compromised, which is not the same statement as the vendor's, that access was limited to one mailbox. Those two remain published side by side, unmerged.
Scope limitation — please quote this alongside any part of this advisory
Our evidence establishes that one mailbox on the airdroid.com domain was under adversary control on 2026-08-06, and nothing beyond that. We found no evidence that AirDroid or AirDroid Business products, systems, infrastructure or customer data were compromised, and no evidence that any AirDroid user account was affected. We make no such claim. Scope beyond a single mailbox is not established; only Sand Studio's own Google Workspace audit logs can determine it. Full detail in Section 10.
On 2026-08-06 at 14:06:03 UTC, Lifted Holdings LLC received a credential-phishing email sent from a Sand Studio Pte. Ltd. business-development mailbox on the airdroid.com domain. The message was addressed to undisclosed-recipients:; with our address BCC'd, carried the subject "Sand Studio Pte. Ltd. - RFQ & Investment Partnership", opened "Dear Prospective Partner", and offered a "REVIEW PROJECT" hyperlink.
The message was not spoofed. The raw message headers, obtained and parsed on 2026-08-06, carry dkim=pass header.i=@airdroid.com header.s=google, spf=pass from a Google outbound relay, and dmarc=pass (p=REJECT sp=REJECT dis=NONE), with no hop outside Google's infrastructure in the Received: chain (Section 5). Independently of any header analysis, when our founder challenged the sender in-thread, the mailbox replied 7 minutes later, quoting his text and instructing him to "log in using your email account." A spoofing sender never receives that reply.
The linked payload is a two-stage credential-harvesting kit whose architecture is consistent with adversary-in-the-middle session-token theft (moderate confidence — see Section 6): a Microsoft-branded gate on an aged, abused domain that hands the victim's email address to a Cloudflare-fronted .icu domain registered seven days before the campaign, which serves a Google sign-in clone. When we queried on 2026-08-06 the stage-2 infrastructure had no record in the public sources we checked. Indicators are published in Section 7.
dkim=pass with d=airdroid.com s=google, spf=pass from Google relay 209.85.220.65, dmarc=pass against the domain's p=reject policy, and no external hop in the Received: chain. (Confidence: confirmed by direct observation — see Section 5. What that does not establish is equally important: see Section 10.)addendum-200notice-encryption-base.icu exists, dated 2026-07-31 — one day after the domain was registered and six days before the message we received — but that scan terminated on example.com and did not capture the payload. No public analysis of the kit or its indicators existed before this advisory. Public records now exist for both stages — see Third-party corroboration. Correction to v1.0, which stated zero prior scans; see Section 6. We have not surveyed commercial blocklists or vendor detection.pulp2pack.com is roughly 2,806 days (~7.7 years) old by our lookup, sits on GreenGeeks shared hosting, and its root currently serves an unrelated Indonesian-language gambling SEO link farm. We assess it as an abused domain rather than one the actor registered for this campaign; we cannot from outside exclude re-registration of an expired domain./bidaccess/rfp-notification.html appears in public scan records on several unrelated hosts, the earliest dated 2026-05-05 — three months before the message we received. The actor rotates hosting across compromised sites, object storage and serverless platforms while keeping the path constant, which makes the path itself a durable hunting string.Last-Modified: Thu, 06 Aug 2026 13:15:32 GMT — written, or last modified, 50 minutes 31 seconds before the 14:06:03 UTC send, subject to the origin server's clock.airdroid.com and nothing beyond it. No compromise of AirDroid products, systems, customer data or user accounts is established or claimed — see Section 10.| Finding | Confidence | Basis |
|---|---|---|
| The sending mailbox was under adversary control | Confirmed | Interactive in-thread reply at 14:51:58 UTC quoting our challenge |
| Sent from inside the Workspace tenant, not spoofed | Confirmed | Raw headers: dkim=pass d=airdroid.com s=google, spf=pass from Google relay, dmarc=pass (p=REJECT), no external hop in the Received: chain |
| Composed in the Gmail interface by a logged-in operator | High | mail.gmail.com Message-ID format, X-Gm-* headers, no X-Mailer |
| Bulk send against a contact or partner list | High | undisclosed-recipients:; + BCC + "Dear Prospective Partner" |
| Two-stage credential-harvesting kit | Confirmed | Static analysis of the stage-1 script; observed stage-2 Google clone |
| Capable of MFA bypass via session-token relay | Moderate | Architecture is consistent with AiTM; not observed end to end |
| pulp2pack.com is an abused legitimate domain, not attacker-registered | Moderate-High | ~7.7-year-old domain, unrelated multi-vertical abuse, shared hosting. Re-registration of an expired domain not excluded |
| Anti-analysis behaviour in use at stage 2 — per-IP cloaking | WITHDRAWN | Refuted on re-check. The resets were in-path phishing filtering on our own egress, not attacker behaviour — Section 6 |
| Stage 2 gated by Cloudflare Turnstile | Confirmed | HTTP 200 with a Turnstile challenge from two independent vantage points, 2026-08-06 19:15–19:25 UTC |
| Multi-host campaign reusing one kit path | High | Identical /bidaccess/rfp-notification.html path on unrelated hosts in public scan records, earliest 2026-05-05 |
| No prior public analysis of this infrastructure | Moderate-High | One prior urlscan.io record (2026-07-31) exists but did not capture the payload. Commercial blocklists and vendor detection not surveyed |
| AirDroid products / customer data compromised | NOT ESTABLISHED | No evidence either way. Requires Sand Studio's Workspace audit logs |
| Scope beyond one mailbox | NOT ESTABLISHED | A domain-level DKIM signature cannot distinguish one account from many |
All timestamps UTC, 2026-08-06.
| Time (UTC) | Event | Evidence |
|---|---|---|
| 13:15:32 | Stage-1 payload staged on pulp2pack.com/bidaccess/rfp-notification.html — about 50 minutes before the send. | HTTP Last-Modified response header |
| 14:06:03 | Phishing email sent from the Sand Studio business-development mailbox. To: undisclosed-recipients:;. BCC: will@liftedholdings.com. Subject: "Sand Studio Pte. Ltd. - RFQ & Investment Partnership". | Received message, Lifted Holdings mailbox |
| 14:45:03 | Daniel Wilson Kemp (Lifted Holdings) challenges the sender in-thread. | Sent message |
| 14:45:37 | Message forwarded to a third party for awareness. | Sent message |
| 14:51:43 | T+45 min — Lifted Holdings notifies the vendor at success@airdroid.com. | Sent message |
| 14:51:58 | The operator replies in-thread, 7 minutes after the challenge, quoting our text: "This email serves as confirmation that it is from our company and contains a project proposal for your review. Please log in using your email account to access and review the document." | Received message |
| 14:52:29 | AirDroid automated acknowledgement — Ticket #74851 opened. | Received message |
| 15:08:59 | Lifted Holdings escalates again in-thread; internal incident response declared. | Sent message |
| ~16:42 | Stage-1 payload retrieved and statically analysed by Lifted Holdings; stage-2 infrastructure profiled; DNS and stage-2 reachability tests executed. | This advisory, Sections 5-7 |
| 17:10:24 | Full technical report sent to security@airdroid.com, the vendor's published security-reporting address, referencing Ticket #74851, with the complete investigation report attached. The letter stated plainly that we were not holding for a standard embargo window, offered to publish alongside the vendor's own advisory, offered our draft in advance, and offered to work with the vendor on timing if it told us it was actively remediating. | Sent message; Lifted Holdings incident record |
| 17:10:37 | The copy addressed to dmarc-reports@airdroid.com — the aggregate-report destination published in the domain's own DMARC record — was rejected 550 5.1.1 by the domain's authoritative mail host. See Section 5. | Delivery status notification |
| 18:00 | Advisory LH-2026-001 published — after the security-address disclosure, not before it. | This document |
We did not give Sand Studio a disclosure window before publishing, and we told the vendor so at the time. Our 17:10:24 UTC disclosure to security@airdroid.com said in terms that we were not holding for a standard embargo window, and why. We notified the vendor 45 minutes after receipt, escalated through its own published security-reporting address with the full report attached, and had received nothing beyond an automated ticket acknowledgement. That was the position when this advisory was published, and this section records the reasoning as it stood then. It has since changed: the vendor responded substantively the following day, and its response is published at Vendor response below.
Three facts drove the decision:
undisclosed-recipients:;. Every other person who received that mail is unaware there are others, unaware the sender was under adversary control, and still exposed. Only the vendor can notify them individually. Publishing the indicators is the only lever we hold that reaches them.We regard withholding live, unblocked indicators from exposed third parties as the greater harm. We offered to publish alongside Sand Studio's own advisory rather than ahead of it, offered our draft in advance, and offered to work with the vendor on timing. We said we would publish any statement the vendor wished to make. The vendor has made one, and the rest of this section is it.
Sand Studio responded substantively on 2026-08-07, the day after publication, and asked us on 2026-08-10 to update this advisory so the public record reflects that work. This section is that update.
| Time (UTC) | Event | Evidence |
|---|---|---|
| 08-07 02:30:21 |
A message arrives from the compromised mailbox itself — the same mailbox that sent the phishing message and answered our challenge twelve hours earlier. It states that the phishing message "was NOT sent by me or authorized by AirDroid", that the security team is "investigating the incident to determine its scope and origin", and that recipients should not click links or reply with sensitive information. We cannot attribute this message to the account holder rather than to the adversary, and we do not. See Provenance. | Received message |
| 08-07 06:31:46 |
Sand Studio issues a customer-facing security notice from biz-tech@airdroid.com, addressed to undisclosed-recipients:;, with Lifted Holdings among the blind-copied recipients. Quoted in full below. | Received message |
| 08-07 07:28:51 |
AirDroid Customer Success acknowledges the report — the first reply from a person rather than from the ticketing system: "We have treated this as top priority and initiated the investigation right away." | Received message |
| 08-07 11:23:57 |
Substantive response from security@airdroid.com — the vendor's account of its investigation, containment and notification actions. Summarised below. T+18h 13m from our disclosure to that address, and T+21h 17m from the phishing send itself. | Received message |
| 08-10 03:18:18 |
Sand Studio asks us to update this advisory, noting that it still reflected the status at the time of original publication, and setting out the developments it wished the public record to carry. | Received message |
| 08-10 — |
Advisory revised to v1.3, then to v1.4 the same day. This section added; the status line, Section 9 and Section 10 updated accordingly. v1.4 added Provenance after we ran header authentication on every message received from the vendor's domain and found that all of them pass exactly as the phishing message does. | This document |
| 08-11 06:18:43 |
Sand Studio offers a meeting to walk through its findings — a fourth address in that tenant, copying two further members of staff. | Received message |
| 08-11 11:36:34 |
We decline to treat email from the affected domain as resolution, and ask for a public notice on a company-operated surface. "A blind bcc email from the compromised workspace domain does not show resolution or customer disclosure… We can't alleviate a breach of a workspace account using the same email domain that was breached." We state that we are continuing to treat the vendor as potentially compromised until such a notice exists. | Sent message |
| 08-12 11:32:13 |
Sand Studio publishes a security notice on airdroid.com — Security Notice Regarding Recent Phishing Incident. Time taken from the Last-Modified header of the page as served to us. T+23h 55m from our request, T+5d 18h 21m from our disclosure. Read in full at The public notice. |
Vendor website |
| 08-12 12:09:11 |
The vendor's security team sends us the URL and states that the notice "serves as our public company statement regarding the incident", inviting us to update this advisory and disclosure timeline. | Received message |
| 08-12 — |
Advisory revised to v1.5. Public notice retrieved, verified and recorded; provenance question resolved; our incident response closed. | This document |
This was a private email, not a public disclosure. It was addressed to undisclosed-recipients:; and reached us as one of the blind-copied recipients — which means we cannot see who else received it and cannot confirm that it reached every affected party, or what fraction of them it reached.
As of 2026-08-10 we could find no public statement of any kind. We checked the AirDroid newsroom (most recent entry October 2025), the AirDroid security centre at airdroid.com/resources/security/, and public web search. None carried an advisory, incident notice or breach disclosure relating to this event. We recorded that as an observation rather than a criticism — a vendor may have sound reasons for private notification — but the difference between "notified an unknown set of recipients privately" and "disclosed publicly" is load-bearing for anyone relying on this advisory, and for any organisation trying to work out whether it was on that BCC line.
Superseded on 2026-08-12. A public notice now exists on the vendor's own domain. The paragraph above is left standing as the record of what was true when it was written, which is how every correction in this advisory is handled. See The public notice.
Recommendation 7 of Section 9 asked Sand Studio to publish a customer-facing notice. It did so about sixteen and a half hours after the send. We had asked: the same recommendation was in the technical report sent to security@airdroid.com at 17:10:24 UTC on 2026-08-06, roughly thirteen hours earlier, and in v1.0 of this advisory. We cannot tell whether the notice was prompted by that report or was already in train, and we do not claim it either way. We reproduce it unedited:
"Dear Valued Customers,
Our company discovered today that an employee's email account was accessed without authorization, resulting in unauthorized emails being sent at 06-August-2026.
If you received this email: Please do not click any links or attachments within it. Please do not reply with any personal or business information. Please do not enter any account credentials or passwords. We recommend deleting the email.
If you have already clicked any links, downloaded attachments, or entered any credentials, please change your password immediately and notify your IT department.
Sand Studio is notifying their corporate email addressees and conducting internal investigation and containment of this incident.
We apologize for any inconvenience caused and rest assured the Sand Studio team is taking all necessary actions to contain this cybersecurity incident and you will be informed of any investigation outcome when it is ready."
AirDroid Business Technical Support Team — 2026-08-07 06:31:46 UTC
The following is Sand Studio's account of its own investigation, summarised from its messages of 2026-08-07 and 2026-08-10 and published because we undertook to publish any statement it wished to make. We have not independently verified any of it. It rests on Google Workspace audit data that only Sand Studio holds — which is exactly the limitation this advisory has carried since version 1.0.
It answers the question we said only the vendor could answer — and it is not the same statement as ours. This distinction is worth being pedantic about, because the whole advisory rests on it. Our evidence established that one mailbox was under adversary control and gave us no basis to say anything about any other. That is an absence of evidence, and we were careful never to dress it up as evidence of absence. Sand Studio now asserts the positive claim we declined to make: that the unauthorised access was limited to that one mailbox. We are not treating the vendor's assertion as confirmation of ours, because ours was never a claim about the true scope — it was a statement about the limits of what we could see from outside. What has changed is that a party writing from the vendor's domain has now answered that question on the record, and the answer contradicts nothing we published. Whether that party is the vendor or the adversary is itself unresolved — see Provenance. Both statements stand here side by side; we have not merged them into one.
It addresses the exposure that drove publication without an embargo — on the vendor's account. The third of our three reasons was that the other recipients were BCC'd, could not see one another, and could be reached only by the vendor. Sand Studio states that it identified all recipients of the send and issued security warnings to them, and it published the customer notice above. Those are recommendations 5 and 7 of Section 9. This is the one claim in the vendor's account we have no way to check at all — we never held the recipient list, which is precisely why we raised the concern — and it happens to be the claim that retires our own justification for publishing without an embargo. We are not going to quietly let it do that. We record the vendor's statement, we have no evidence against it, and we note that we cannot verify it.
It changes no observation in this advisory. The header analysis in Section 5, the in-thread reply at 14:51:58, the payload analysis in Section 6 and every indicator in Section 7 are unaffected. Nothing in the vendor's account contradicts them; the vendor's own description of the initial access is consistent with the kit we documented.
It adds one thing we did not have: the chain runs at least three organisations deep. On the vendor's account, the mailbox that phished us had itself been taken over via the same lure sent from another organisation's mailbox, which Sand Studio in turn notified. That is the propagation mechanism this campaign relies on, stated by a party that sat in the middle of it: each compromised mailbox is used to phish the trusted correspondents of its owner, and every hop inherits real domain authentication and a real commercial relationship. We were one hop downstream. Whoever received that July message was one hop up. The defensive implication is that recipient notification has to travel in both directions — to the people the mailbox wrote to, and to whoever wrote to it — and Sand Studio states that it did both.
Limits on this section
Attribution, not endorsement. Everything under What the vendor reports is Sand Studio's statement about its own environment. We publish it; we do not certify it. Equally, we have no evidence inconsistent with any part of it. On whether the statement is Sand Studio's at all, see Provenance immediately below — it is not a rhetorical question.
Personal data, and where we drew the line. Sand Studio asked that we avoid publishing personal data, recipient information or mailbox identifiers. We want to be exact about what we do and do not publish rather than claim a blanket compliance we have not given.
undisclosed-recipients:;, so we never had the recipient list. No other recipient appears anywhere in this advisory or in the indicator files.Received: and Authentication-Results: evidence in Section 5 and in the indicator blocks in Section 7, and it is carried in the CSV and STIX feeds — labelled in each as a victim account, not attacker-owned. We have kept it out of prose throughout. We are not redacting it, and we would rather say so than quietly appear to. The sending address is the single most useful thing a defender can search their own mail logs for, it is what makes this campaign findable retrospectively by an organisation that was on the BCC line, and it has been public since 2026-08-06 in feeds that third parties may already have ingested. Withdrawing it now would degrade the defensive value of this advisory without meaningfully un-publishing anything.If Sand Studio takes a different view on that last point, we will publish its position here alongside ours.
Every message in this section arrived from a domain where we have proven adversary presence, through the medium that is the subject of this advisory. One of them asked us to change a published security advisory. That deserves testing rather than assuming, so we tested it.
Version 1.3 of this section stated that we had not re-run the header authentication analysis on the vendor's messages. We have now done so, on every message received from airdroid.com between 2026-08-06 and 2026-08-10.
| Message | From | Authentication | Prior correspondence |
|---|---|---|---|
| 08-06 14:06 the phishing message | the compromised mailbox | dkim=pass · spf=pass · dmarc=pass (p=REJECT) | Since 2023-12 |
| 08-06 14:51:58 operator reply to our challenge | the compromised mailbox | Tenant-authenticated (Section 5) | Since 2023-12 |
| 08-06 14:52–20:12 four automated ticket acknowledgements | success@ | dkim=pass · spf=pass · dmarc=pass | Since 2024-12 |
| 08-07 02:30:21 “not sent by me” | the compromised mailbox | dkim=pass · spf=pass · dmarc=pass | Since 2023-12 |
| 08-07 06:31:46 customer notice | biz-tech@ | dkim=pass · spf=pass · dmarc=pass | None — first contact |
| 08-07 07:28:51 Customer Success | success@ | dkim=pass · spf=pass · dmarc=pass | Since 2024-12 |
| 08-07 11:23:57 substantive response | security@ | dkim=pass · spf=pass · dmarc=pass | None — first contact |
| 08-07 12:20:49 internal reply, copied to us | an established staff contact | dkim=pass · spf=pass · dmarc=pass | Since 2023-12 |
| 08-10 03:18:18 request to update this advisory | security@ | dkim=pass · spf=pass · dmarc=pass | None — first contact |
Every one of them passes. That establishes far less than it appears to. The phishing message at the top of that table passes the identical checks — dkim=pass header.i=@airdroid.com header.s=google, spf=pass from a Google outbound relay, dmarc=pass under p=reject. That is the central finding of this advisory, set out in Section 5: tenant authentication establishes where a message came from, not whether it is legitimate. Applied to the replies it returns the same answer it returned for the phish — sent from an authenticated session inside the airdroid.com tenant — and it cannot distinguish the vendor's security team from an adversary holding tenant access. We are not going to apply a weaker standard to a vendor's exculpatory mail than we applied to its incriminating mail.
One observation we will state and then immediately neutralise, because it invites over-reading: the phishing message left Google relay 209.85.220.65 while every subsequent message left 209.85.220.41. This is not evidence of anything. Those are addresses in Google's shared outbound pool, assigned per connection. We record it so that nobody reads significance into it later.
What the evidence does support, narrowly:
security@, biz-tech@ and success@ are not the compromised mailbox. For those messages to be the adversary's work, the adversary would have to hold several mailboxes in that tenant — which would directly contradict the vendor's own account that access was limited to one. So either the responses are genuine, or the incident is materially larger than the party writing them says it is. We cannot presently tell which, and we will not present the first as established.security@ and biz-tech@ appear in our correspondence for the first time during this incident. For security@ that is unremarkable and expected — it is the address published on the vendor's own security page, and we had only just filed a security report to it. To biz-tech@ we have found no public reference on the pages we checked. We note this as a fact and not an accusation: a long correspondence history would prove an address is real, not that a particular message from it is.What we did in response, and what we deliberately did not
We added the vendor's account. We changed no finding, removed no indicator, retracted no conclusion, and redacted nothing. A request to modify a published security advisory reached us from a domain with confirmed adversary presence. The correct handling of such a request is to publish it, attribute it, authenticate what can be authenticated, state plainly what cannot, and leave the underlying evidence exactly where it was. Every indicator in Section 7 is unchanged. The scope limitation in Section 10 is unchanged. The victim mailbox address remains published as an indicator.
Had the request been to remove indicators rather than to add context, we would have refused it, and we would have said so here. We spell that out because the distinction is the whole reason this subsection exists: an advisory that can be edited by whoever controls the mailbox it describes is not an advisory.
Resolved — 2026-08-12
The last bullet above is now out of date, and we are pleased to say so. It recorded that no message had been confirmed out of band and that no notice existed on the vendor's own website. A notice now exists. The resolution came not from a stronger reading of the email, but from a second surface — which is the only thing that could have resolved it. See The public notice immediately below.
Five days and 21 hours after the send, Sand Studio published a security notice on airdroid.com. It is the first statement about this incident to reach us on a surface the compromised mailbox does not control, and it is the reason this advisory is now closed on our side.
We asked for it in those terms. On 2026-08-11 at 11:36:34 UTC, after four days of correspondence conducted entirely through the affected tenant, we wrote:
"I'd like you guys to follow standard security procedure and issue a release from a known company operated domain… A blind bcc email from the compromised workspace domain does not show resolution or customer disclosure… We can't alleviate a breach of a workspace account using the same email domain that was breached. My security team advises we are still treating as 'potentially compromised and not resolved'. Mostly due to the lack of public disclosure from an uncompromised source."
The notice was published 23 hours 55 minutes later. Unlike the customer notice of 2026-08-07, we are able to say when it appeared without relying on anyone's account of it: the page carries Last-Modified: Wed, 12 Aug 2026 11:32:13 GMT. The vendor's security team sent us the URL 36 minutes after that, describing it as its "public company statement regarding the incident."
URL: https://www.airdroid.com/resources/security/6d1879c16e1490c91ccd7d7e2b9e3bcd/
Title: Security Notice Regarding Recent Phishing Incident
Retrieved: 2026-08-12 15:15:01 UTC — HTTP/2 200, server: openresty, 14,171 bytes
Page date: "August 2026" (the notice carries no day-level date of its own)
We retrieved it directly rather than through any link the vendor controls in mail, and we have retained the page as served for the incident record.
Most of the notice restates the account the vendor gave us privately on 2026-08-07. Four things in it are new or newly on the record:
We record these because we record this kind of thing about ourselves, and it would be inconsistent to soften it for someone else. Both are facts about the page, checked directly, not inferences about intent.
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">.airdroid.com/sitemap.xml, all of which we checked, and it is not linked from the Security Center at airdroid.com/resources/security/, which is the page we checked on 2026-08-10 and the page we asked them to use. Its URL is a 32-character hexadecimal string.The practical consequence is that the notice is publicly reachable but not publicly discoverable. Anyone who has the URL can read it, with no account and no authentication — that is what makes it a public statement, and it is why we treat it as one. But a customer who received the phishing mail and goes looking for an explanation will not find this page through a search engine, through the vendor's security index, or through its sitemap. They would have to be sent the link. The link above is followable and this advisory is indexed, so from today one discoverable path to it exists.
The question the subsection above left open was whether we were corresponding with the vendor or with an adversary holding tenant access. Header authentication could not answer it, because the phishing message passes the same checks. Publication on airdroid.com answers it on different evidence: the website is a separate control plane from the Google Workspace mailbox, with separate credentials; the notice is hosted where the vendor's own staff and customers can see it, under the vendor's name; and the notice is consistent in every material respect with what the mailboxes told us.
We are not claiming proof, and the distinction still matters. We have not confirmed anything by voice, and we never obtained the out-of-band call we said we intended to seek. What we have is corroboration across two independently controlled surfaces instead of one, which is a materially different evidential position from the one we were in on 2026-08-10, and enough to resolve the question to our satisfaction. We are stating the standard we applied rather than implying a stronger one.
Closing this advisory — what that does and does not mean
Concluded means we have stopped investigating, not that we have retracted anything. Every observation, indicator and confidence level in this document stands. Section 10, "What we did not find", is unchanged. The indicator files continue to be published and remain suitable for detection engineering. The victim mailbox address remains published as an indicator, because it is one.
What would reopen it: a new send from the same tenant; any indicator in Section 7 becoming active again; evidence that a second mailbox in that tenant was involved, which would contradict the vendor's own scope claim; or a material change published by the vendor under the undertaking quoted above. We will continue to watch the indicators. We are not treating this as resolved on the vendor's behalf — we are recording that our own response, which began 45 minutes after the mail arrived, has run its course.
Nothing in this advisory was edited at the vendor's request, at any version. They asked twice: once to reflect their response, once to reflect their public notice. Both times we added their account and changed nothing of ours. A request to remove an indicator would have been refused, and this paragraph would have said so.
AirDroid states that its product suite has surpassed 500 million downloads and users worldwide across all platforms. We cite the vendor's own published figure for exactly one purpose — to establish the footprint of the vendor, not the reach of this incident. AirDroid and AirDroid Business are widely deployed Android device-management products, and mobile device management holds privileged administrative authority inside customer environments. A compromised mailbox at a vendor in that position warrants prompt disclosure, which is why we reported it within 45 minutes and are publishing the indicators.
The 500 million figure is not an impact number and must not be reported as one. It describes how many people use AirDroid's products. It does not describe how many people were affected by this incident. Our evidence supports no impact figure of any magnitude — the demonstrated reach is the correspondence list of a single mailbox. Any account of this incident that places the install base alongside the compromise as though the two were related is misreporting it.
The blast radius we can actually speak to is the correspondence reach of a single mailbox: whoever was on that 14:06 UTC send, plus anyone who has ever exchanged mail with that address and would find a follow-up from it unremarkable.
Two structural factors make that reach unusually effective:
p=reject policy, arrives with the full trust of an established commercial relationship. It bypasses the heuristics that catch lookalike domains, because it is not a lookalike — it is the domain.Lifted Holdings is an active AirDroid Business customer. We use it for fleet management of Android-based vending endpoints. That makes this a supply-chain security event for us and not merely inbound spam, and it is why this went to incident response rather than to a spam folder.
The central question for any recipient is whether the sending domain was forged. The published DNS policy for airdroid.com makes that answerable.
airdroid.com MX aspmx.l.google.com (1)
alt1.aspmx.l.google.com (5)
alt2.aspmx.l.google.com (5)
aspmx2.googlemail.com (10)
aspmx3.googlemail.com (10)
-> Google Workspace tenant
airdroid.com TXT v=spf1 include:_spf.google.com include:amazonses.com include:shops.shopify.com include:mail.zendesk.com -all
-> "-all" = hard fail for any unlisted source
_dmarc.airdroid.com TXT v=DMARC1;p=reject;rua=mailto:dmarc-reports@airdroid.com;adkim=s;aspf=r
-> p=reject, strict DKIM alignment, relaxed SPF alignment
p=reject instructs receiving mail systems to reject messages that fail DMARC evaluation outright rather than quarantining them. adkim=s requires the DKIM signing domain (d=) to match the From: domain exactly, not merely share an organisational parent. -all in the SPF record hard-fails every source not explicitly listed.
Under that combination, a message forging @airdroid.com from outside the tenant would be expected to fail DMARC and be rejected rather than delivered. This message was delivered to the inbox. That was our initial, policy-based reading; the raw headers settle it directly.
The original .eml was exported and parsed on 2026-08-06. Verbatim from the message:
Authentication-Results: mx.google.com;
dkim=pass header.i=@airdroid.com header.s=google header.b=Ns2xG88b;
arc=pass (i=1);
spf=pass (google.com: domain of debbie.hu@airdroid.com designates
209.85.220.65 as permitted sender) smtp.mailfrom=debbie.hu@airdroid.com;
dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=airdroid.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airdroid.com; s=google; ...
Return-Path: <debbie.hu@airdroid.com>
Message-ID: <CANKq_2yK8PqJwMFSenTDmmwxDEQkd_W-bDZqsprM8HU8DheW=g@mail.gmail.com>
Date: Thu, 06 Aug 2026 22:06:03 +0800
Received: (2 hops, both internal to Google)
from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65])
by mx.google.com with SMTPS ... (Google Transport Security)
by 2002:a05:6504:b8a:b0:30e:4ce7:25ab with SMTP
| Observation | Significance |
|---|---|
| dkim=pass, d=airdroid.com, s=google | Valid DKIM signature under the domain key using Google Workspace's default google selector — signed by Google on behalf of the tenant. |
| spf=pass, client 209.85.220.65 | The sending host is a Google outbound relay. Return-Path aligns to the From: domain. |
| dmarc=pass (p=REJECT sp=REJECT dis=NONE) | DMARC passed against a reject policy with strict DKIM alignment. No receiver-side policy override was applied. |
| No external hop in the Received: chain | The decisive detail. A spoofed message, or one injected via a third-party mailer or compromised relay, leaves an external hop. There is none — the message never traversed a mail server outside Google. |
| Message-ID: <…@mail.gmail.com> | The Message-ID format Gmail generates for messages composed in the Gmail interface — not SMTP relay injection, not a bulk-mailer platform. No X-Mailer or User-Agent header is present. |
| No divergent Reply-To | Our 14:45 challenge was addressed to the vendor mailbox itself, and the 14:51:58 reply originated from it. The reply is not explained by an attacker-controlled reply address. |
| Date: … +0800 | The sending client's configured timezone is UTC+8, consistent with the account's own regional setting. Not a reliable indicator of the operator's physical location; we make no attribution from it. |
Conclusion, directly evidenced: the message was composed in the Gmail interface and sent from an authenticated session inside Sand Studio's Google Workspace tenant, through Google's own outbound relay, with a valid domain DKIM signature. It was not spoofed, not relayed, and not injected. Someone was logged into that mailbox and sent it.
This distinction matters, so it is worth stating precisely.
airdroid.com tenant. That is equally consistent with a stolen password, a stolen session cookie, a malicious OAuth grant, or a rogue insider. We cannot distinguish between those from outside.The boundary of this section
The headers establish that the message was sent from an authenticated session inside the tenant. They do not establish how that session was obtained — a stolen password, a stolen session cookie, a malicious OAuth grant and insider access are all equally consistent with this evidence. They do not distinguish one compromised mailbox from several. And they say nothing whatsoever about AirDroid products, systems, or customer data. See Section 10.
The DMARC record above publishes an aggregate-report destination, dmarc-reports@airdroid.com, and specifies no failure-report (ruf) destination at all. When we copied that address on our 17:10:24 UTC disclosure, the message was rejected at 17:10:37 UTC by aspmx.l.google.com — the domain's own authoritative mail host — with 550 5.1.1 The email account that you tried to reach does not exist. The record was re-queried against an independent public resolver and returns the same destination, and the address is on the same domain as the record, so no external-destination authorisation is required. This is independently verifiable by any reader from public DNS plus one SMTP transaction.
Stated precisely, and this is the limit of the claim: a published rua address that does not accept mail means DMARC aggregate reports — the telemetry by which a domain owner learns what is being sent as their domain — are undeliverable. It is a mail-authentication hygiene gap in the reporting path only. It is not evidence of this compromise, it is not its cause, and it should not be characterised as negligence. The domain's enforcement posture is meanwhile stronger than most: p=reject with strict alignment is stricter than the majority of domains deploy.
The 14:51:58 reply settles the spoof question on its own, with no header analysis required. That message (1) arrived in response to a challenge we sent to the vendor mailbox, (2) quoted our challenge text back to us, and (3) answered it with social engineering — an assurance that the mail was genuine plus an instruction to log in.
An attacker who merely forges a From: address never receives the reply and cannot do any of that. The message carried no divergent Reply-To, so our challenge went to the vendor mailbox itself. Independent of every header above, someone was reading and answering mail in that mailbox in real time.
Email (authenticated send, airdroid.com Workspace tenant)
| "REVIEW PROJECT" hyperlink
v
STAGE 1 -- https://pulp2pack.com/bidaccess/rfp-notification.html
| hijacked legitimate domain; Microsoft-branded "identity verification" gate
| auto-extracts / prompts for victim email, then hands off via URL fragment
v
STAGE 2 -- https://addendum-200notice-encryption-base.icu/?b4f61f2a#<victim-email>
Cloudflare-fronted; Turnstile-gated; Google sign-in clone; credential capture
inferred from the rendered form (submission endpoint not observed);
architecture also consistent with post-MFA session-cookie relay
(moderate confidence; not observed end to end)
http_code 200
remote_ip 23.106.55.199
size 21039 bytes
last-modified: Thu, 06 Aug 2026 13:15:32 GMT
23.106.55.199 PTR sgpr200.websitehostserver.net
AS59253 LEASEWEB SINGAPORE PTE. LTD. (SG)
nameservers ns1.greengeeks.net / ns2.greengeeks.net (GreenGeeks shared hosting)
We assess the domain as abused rather than attacker-registered. pulp2pack.com is approximately 2,806 days old (~7.7 years) by our lookup on 2026-08-06. Its root currently serves an Indonesian-language slot-gambling SEO link farm, and urlscan.io holds a record for an unrelated Indian print-shop site at sunriseprintstore.in.pulp2pack.com dated 2025-12-14. An aged domain simultaneously serving unrelated spam verticals and a phishing path is characteristic of a compromised shared-hosting account reused as free infrastructure — though from outside we cannot exclude re-registration of an expired domain, which would make it attacker-controlled instead. On the evidence we have, our assessment is that the domain's owner is also a victim of this activity. We make no claim about the domain's registrant, about other sites on the same host, or about GreenGeeks. Defenders should treat the specific path as malicious and the domain as an abused third party.
| Behaviour | Detail |
|---|---|
| Brand impersonation | Microsoft. Loads a genuine Microsoft-hosted asset — aadcdn.msauth.net/shared/1.0/content/images/backgrounds/4_eae2dd7eb3a55636dc2d74f4fa4c386e.svg — for visual authenticity. |
| Forensic tell | Footer reads "(c) 2026 Microsoft Corportation" (misspelled, sic). High-fidelity hunt string. |
| Assurance theatre | Staged "Checking browser compliance / Verifying encryption protocols / Validating user identity" messages fire on fixed timers at 600 / 1200 / 1800 / 2400 ms. Purely cosmetic — nothing is checked. |
| Email auto-extraction | k2q8h5t() scrapes a victim email from query values, query keys, the URL fragment, fragment sub-parameters, and any $-delimited segment. |
| Encoding tolerance | m5v8r2k() accepts that email as plaintext, base64 (via atob) or hex — indicating a mass-mailer that personalises links per recipient. |
| Handoff method | Config r4v7m9t: 'hash' — the victim email is appended to the stage-2 URL fragment (#victim@domain). |
| Auto-advance | setTimeout(r5h9x3w, 3500) — redirects after 3.5 seconds with no user interaction. Manual submit adds a 5-second fake "Verifying..." delay. |
| Obfuscation | Randomised 7-character identifiers throughout: q3n7r9v, u8t4m2w, h8p3w6n, k2q8h5t, m5v8r2k, r5h9x3w, r4v7m9t. |
| Campaign identifier | b4f61f2a |
| Exfiltration | None at stage 1. The page POSTs nothing. It classifies the victim and forwards. Credential capture happens at stage 2. |
Analyst note — why the fragment handoff matters
URL fragments are not transmitted in the HTTP request. They are not written to web-server logs, and they are not captured by forward proxies or secure web gateways, which record the path and query string only. One precision worth stating, because it is commonly got wrong: mail-security URL rewriters operate on the href string in the message body before any request is made, so they would capture a fragment if one were present in the emailed link — here there is none, because the fragment is appended client-side by stage 1's redirect. The rewriter only ever sees the stage-1 URL. The effect of passing the victim identifier after the # is that your own telemetry shows a visit to a .icu apex with a campaign parameter and nothing that identifies who was targeted; we describe the effect rather than assert the author's intent.
It serves a second purpose. Because the fragment is read client-side before rendering, stage 2 can pre-fill the username and fingerprint the victim's identity provider before it draws a single pixel — which is the standard precondition for an adversary-in-the-middle session-token relay: the attacker proxies the genuine login, the victim completes MFA against the real provider, and the attacker captures the resulting session cookie. Standard MFA — TOTP codes or push approvals — does not defend against this. We assess the kit's architecture as consistent with AiTM session theft at moderate confidence; we observed the architecture, we did not observe an end-to-end relay.
Because Lifted Holdings was BCC'd on a generic blast rather than sent a personalised link, no email address was embedded in our URL, and the page fell through to prompting for one manually. Recipients who received a personalised link would have been carried through without ever typing their address.
| Attribute | Value |
|---|---|
| URL | https://addendum-200notice-encryption-base.icu/?b4f61f2a |
| Resolves to | 104.21.86.28, 172.67.214.97 — AS13335 Cloudflare (anycast) |
| Nameservers | lennon.ns.cloudflare.com, ophelia.ns.cloudflare.com |
| Registrar | Namecheap, Inc. |
| Domain created | 2026-07-30 — seven days before the campaign |
| Origin host | Concealed behind Cloudflare; identification requires a Cloudflare abuse referral |
| Content observed | Visually faithful Google sign-in clone whose continue= parameter was a base64-encoded genuine accounts.google.com/v3/signin/identifier path. Observed once; we did not preserve a capture of that response and later retrievals from our source address were reset, so this specific observation is not reproducible from our evidence |
Version 1.0 of this advisory reported that stage 2 reset HTTPS connections across three request profiles while cleartext HTTP still answered, and assessed that as attacker-side per-IP “burn-after-view” cloaking. That assessment was wrong, and it is withdrawn. Re-testing from a second, independent egress showed the identical requests returning HTTP 200 in the same minute. The resets were produced by an in-path phishing filter on our own observing network, not by the attacker.
| Request | Original vantage (filtered network) | Independent egress |
|---|---|---|
| HTTPS, Chrome UA, stage-1 referer | Connection reset | HTTP 200 — Turnstile gate |
| HTTPS, no user-agent | Connection reset | HTTP 200 — Turnstile gate |
| HTTPS, iPhone Safari UA | Connection reset | HTTP 200 — Turnstile gate |
| Plain HTTP, port 80 | HTTP 200 — security-vendor block page, not the attacker’s server | Bare default nginx page |
Three details establish the mechanism. The cleartext “HTTP 200” from the original vantage was a security vendor’s block page classifying the domain as phishing — not content from the attacker’s host at all. No such product is installed on the workstation, so the interception is upstream on that network path. And TCP reachability to both Cloudflare addresses on port 443 is fine, with unrelated Cloudflare-fronted sites loading normally — the reset keys on the hostname in the TLS SNI, which is the signature of an in-path filter rather than an origin behaviour.
What stage 2 actually does is present a Cloudflare Turnstile human-verification challenge in front of the payload. That still obstructs automated analysis — a crawler gets the challenge, a human victim clicks through it — but it is a different mechanism from per-IP blocking, and it is directly observed rather than inferred.
Version 1.0 carried a residual-risk note that cloaking had been tested from one source address only. That caveat was correct, and re-testing resolved it in the opposite direction to the original conclusion. Any claim about attacker-side filtering needs at least two network vantage points before it is stated; a single-vantage observation cannot distinguish attacker behaviour from your own egress security stack. We publish this correction in full rather than quietly editing it out.
Practical consequence for responders: a “the link is dead / it doesn’t load for me” result is not evidence that a user was safe — and it may say more about your egress filtering than about the attacker. Assume the victim saw live content even where your own retrieval fails.
Public scan records show the identical kit path /bidaccess/rfp-notification.html on
unrelated hosts, the earliest three months before the message we received. The actor rotates hosting
— compromised sites, object storage, serverless platforms — while keeping the path constant.
Status column re-checked 2026-08-06 19:23 UTC.
| Host | First public record | Status |
|---|---|---|
| pulp2pack.com | — (our sample; no public scan) | Live |
| businesswa.me | 2026-08-05 | Live |
| pases.com.co | 2026-08-06 | Removed (404) |
| *.workers.dev (Cloudflare Workers) | 2026-06-25 | Not re-tested |
| *.s3.ap-northeast-3.amazonaws.com | 2026-05-05 | Not re-tested |
Hunting implication: block the hosts, but hunt the path. The URL path has survived at least three months and multiple hosting providers, which makes it a far more durable detection than any single domain in Section 7.
The kit rendered Microsoft branding at stage 1 and Google branding at stage 2. Together with the email-extraction and encoding-tolerance logic — which accepts a victim address in multiple encodings and forwards it — this would permit a kit to resolve the victim's email domain to an identity provider and serve the matching login clone. We cannot confirm that behaviour. Because Lifted Holdings was BCC'd on a generic blast, our request carried no victim identifier, so the Google clone we saw may equally be the kit's default page rather than a fingerprint-selected one. Both airdroid.com and liftedholdings.com are Google Workspace domains. Defenders should not assume the brand they see is the brand another recipient saw — an organisation that uses neither Microsoft nor Google is not thereby out of scope, and a Microsoft-branded gate is not evidence that Microsoft credentials were the target.
| Technique | ID | Observed as |
|---|---|---|
| Phishing: Spearphishing Link | T1566.002 | "REVIEW PROJECT" hyperlink to stage 1 |
| Compromise Accounts: Email Accounts | T1586.002 | Authenticated send from a vendor tenant mailbox |
| Stage Capabilities: Link Target | T1608.005 | Stage-1 payload written ~50 minutes before the send |
| Impersonation | T1656 | Microsoft and Google sign-in clones; genuine aadcdn.msauth.net asset loaded for authenticity |
| Multi-Factor Authentication Interception | T1111 | Not observed. Listed only because the architecture is consistent with session-token relay — moderate confidence, architectural. Do not ingest this as an observed technique |
All indicators below are provided as copyable plaintext for direct ingestion into blocklists, SIEM watchlists, and hunt queries. Observed 2026-08-06 unless otherwise stated. Machine-readable copies: CSV · STIX 2.1.
Before you copy anything
These URLs were live at the time of publication. Do not open them in a browser. They are published un-defanged so they can be pasted directly into blocklists and search tools. Defanged forms for prose: hxxps://pulp2pack[.]com/bidaccess/rfp-notification[.]html and hxxps://addendum-200notice-encryption-base[.]icu/?b4f61f2a.
Two entries in the bare list below must not be blocked outright: the Cloudflare anycast addresses are shared edge infrastructure, and pulp2pack.com is an abused third-party domain — block the /bidaccess/ path, and weigh an apex block against your own environment.
Handling note
The sender address is published only in the technical indicator blocks and in the verbatim header quotation in Section 5, because defenders need it to hunt and to block and because an altered header quotation would not be evidence. It appears in no prose, no heading, no metadata and no summary. The account holder is a victim of this incident, not a participant in it, and is not named anywhere else in this advisory, in its metadata, or in any material we distribute. Please handle accordingly in any reuse.
Copy-paste ready. Annotations follow in the categorised blocks below — read them before you act on this list.
pulp2pack.com addendum-200notice-encryption-base.icu https://pulp2pack.com/bidaccess/rfp-notification.html https://addendum-200notice-encryption-base.icu/?b4f61f2a 23.106.55.199 104.21.86.28 172.67.214.97 sgpr200.websitehostserver.net ns1.greengeeks.net ns2.greengeeks.net lennon.ns.cloudflare.com ophelia.ns.cloudflare.com debbie.hu@airdroid.com b4f61f2a /bidaccess/rfp-notification.html aaf1470747fcb7bad9197fa92c2f5b028f1132ef0396646308623eb4059a86d2
debbie.hu@airdroid.com compromised sender mailbox (Google Workspace;
headers show dkim=pass d=airdroid.com s=google,
spf=pass, dmarc=pass, no external Received hop;
account holder is a VICTIM, not the actor)
Subject: Sand Studio Pte. Ltd. - RFQ & Investment Partnership
To: undisclosed-recipients:; bulk send; recipients BCC'd
Salutation: "Dear Prospective Partner"
Lure: "REVIEW PROJECT" hyperlink; RFQ / investment-partnership pretext
Send: 2026-08-06 14:06:03 UTC
Operator reply text (2026-08-06 14:51:58 UTC):
"This email serves as confirmation that it is from our company and contains a
project proposal for your review. Please log in using your email account to
access and review the document."
https://pulp2pack.com/bidaccess/rfp-notification.html stage 1
https://addendum-200notice-encryption-base.icu/?b4f61f2a stage 2
https://addendum-200notice-encryption-base.icu/?b4f61f2a#<victim-email>
stage 2, fragment handoff
pulp2pack.com ABUSED legitimate domain (~2806 days /
~7.7 years old by our lookup); GreenGeeks
shared hosting. Assessed as an abused third
party, not attacker-registered. Block the
/bidaccess/ path; weigh an apex block against
your own environment.
addendum-200notice-encryption-base.icu attacker-registered 2026-07-30, Namecheap,
Cloudflare-fronted
sunriseprintstore.in.pulp2pack.com unrelated third-party site recorded on the
same abused domain (urlscan.io, 2025-12-14).
Listed as context for the abuse assessment
only - NO allegation is made against that
site or its operator.
23.106.55.199 AS59253 LEASEWEB SINGAPORE PTE. LTD. (SG) stage-1 origin
PTR sgpr200.websitehostserver.net
104.21.86.28 AS13335 Cloudflare, Inc. stage-2 edge (anycast)
172.67.214.97 AS13335 Cloudflare, Inc. stage-2 edge (anycast)
Nameservers:
ns1.greengeeks.net / ns2.greengeeks.net stage-1 hosting
lennon.ns.cloudflare.com / ophelia.ns.cloudflare.com stage-2
NOTE: the Cloudflare addresses are shared anycast edge IPs. Do NOT block them
outright - block the hostname. The stage-2 origin remains concealed.
Campaign ID: b4f61f2a URI path: /bidaccess/rfp-notification.html Path fragment: /bidaccess/ Handoff pattern: <stage2>/?<campaign-id>#<victim-email> Victim encodings: plaintext | base64 (atob) | hex Staging timestamp: Last-Modified: Thu, 06 Aug 2026 13:15:32 GMT Payload size: 21039 bytes (stage-1 HTML) Stage-1 HTML file hashes (rfp-notification.html, 21039 bytes): SHA-256 aaf1470747fcb7bad9197fa92c2f5b028f1132ef0396646308623eb4059a86d2 SHA-1 288e5594263d3ce728cb7d5cc56d8ddd47a860f8 MD5 e7e20d67542713dd23f0fd287b649779 HIGH-FIDELITY STRING (misspelling, verbatim): (c) 2026 Microsoft Corportation Corportation Fake progress strings (fire at 600 / 1200 / 1800 / 2400 ms): Checking browser compliance Verifying encryption protocols Validating user identity Obfuscated identifiers (randomised, 7 chars): q3n7r9v u8t4m2w h8p3w6n k2q8h5t m5v8r2k r5h9x3w r4v7m9t Abused genuine Microsoft asset (loaded by stage 1 for authenticity): https://aadcdn.msauth.net/shared/1.0/content/images/backgrounds/4_eae2dd7eb3a55636dc2d74f4fa4c386e.svg Stage-2 clone artefact: base64-encoded continue= parameter wrapping a genuine accounts.google.com/v3/signin/identifier path
Note on the aadcdn.msauth.net asset: that host is legitimate Microsoft infrastructure and must not be blocked. It is listed because a request for that specific background SVG originating from a page that is not on a Microsoft login domain is a useful referer-based hunt pivot.
addendum-200notice-encryption-base.icu (all subdomains) at DNS, egress proxy, and mail-security URL rewriting.https://pulp2pack.com/bidaccess/rfp-notification.html and the path prefix /bidaccess/ on that host. Consider whether a full-domain block on pulp2pack.com is proportionate for your environment — it is a hijacked legitimate domain.23.106.55.199 at egress. Do not block the Cloudflare anycast addresses.airdroid.com since 2026-07-30 — the stage-2 registration date, not our receipt date. The campaign may predate our sample.undisclosed-recipients:; from any known-good vendor domain — legitimate business correspondence from an account manager rarely takes that shape.# Google Workspace / Gmail investigation search from:airdroid.com after:2026/07/29 from:airdroid.com "Prospective Partner" "pulp2pack.com" OR "addendum-200notice-encryption-base" # Generic mail-gateway / SIEM predicates sender_domain = "airdroid.com" AND received >= 2026-07-30 subject CONTAINS "RFQ & Investment Partnership" body_url CONTAINS "/bidaccess/" body_url CONTAINS ".icu/?b4f61f2a"
/bidaccess/, for the .icu apex, and for the campaign ID b4f61f2a appearing as a bare query string.aadcdn.msauth.net background SVG above with a referer that is not a Microsoft login domain.Critical detection caveat
The fragment-based handoff will not appear in server-side URL logs. Everything after # is stripped by the browser before the request is made — your web-server logs, most proxy logs, and most mail-security click-tracking records will show the .icu apex with a campaign parameter and no victim identity at all. If you hunt only on logged URLs you will systematically undercount who was targeted, and you will miss the personalised links entirely.
The reliable sources are endpoint browser history (which retains the full URL including the fragment) and secure web gateway configurations that explicitly capture full URLs client-side. Where neither is available, treat any observed hit on the stage-2 apex as an interaction of unknown depth rather than a benign redirect.
Assume session-cookie theft, not merely password theft. This is the difference between a contained incident and a persistent one:
The indicators below are now filed with public threat-intelligence services, so nothing in this advisory rests on our assertion alone. Verified 2026-08-06 21:21 UTC.
| Source | Record | Verdict |
|---|---|---|
| urlscan.io — stage 1, full chain | 019fd8f1-589d-74b9-9443-b0390c5aa8ce | Potentially Malicious; brand attribution Microsoft (Consumer), assigned independently of us |
| urlscan.io — stage 2, direct | 019fd8f3-870c-76a8-ab27-31fd0f4befab | Malicious Activity; capture shows the Cloudflare Turnstile challenge, independently confirming Section 6 |
| VirusTotal — stage 1 | 06daf10f…87504c | 5 / 92 — Emsisoft, Fortinet, LevelBlue (phishing); Netcraft, Webroot (malicious); SOCRadar (suspicious) |
The urlscan stage-1 scan followed the redirect and resolved to the stage-2 domain in a single capture, which is the cleanest available demonstration of the automatic hand-off described in Section 6.
The Google Safe Browsing engine row on the VirusTotal URL reports rated both stages clean at 2026-08-06 21:00 UTC, roughly seven hours after the campaign was sent and while five vendors were already classifying stage 1 as phishing or malicious. Safe Browsing is what drives the red interstitial in Chrome, Firefox and Safari, so for those seven hours a recipient who clicked saw no browser warning at all.
Two consequences for defenders. First, browser-level protection cannot be assumed here — users who clicked were not stopped, and your own controls are the only thing that was in the path. Second, and more generally: a clean Safe Browsing verdict is not evidence a URL is safe, particularly for infrastructure less than a fortnight old. We reported both URLs to Safe Browsing at 21:01 and 21:04 UTC; that is a report, not a remedy, and the verdict may still be clean when you read this.
One further observation about coverage. The VirusTotal record for stage 1 already existed when we went to file, timestamped 2026-08-06 14:11:10 UTC — five minutes after the campaign was sent — sitting at 1 / 92. We did not create it. Another recipient's mail security almost certainly did, which is independent evidence that the send reached a wider distribution than us and that at least one other organisation's tooling saw it immediately. Our reanalysis at 20:56 UTC moved it to 5 / 92.
airdroid.com since 2026-07-30.Offered constructively, and written when we had no visibility into what Sand Studio had already done. These are the standard containment steps for this class of incident, published so that any organisation facing the same pattern has them too.
Updated 2026-08-12. The vendor has since reported carrying out work covering most of these. On its own account it secured the affected mailbox and applied additional account-security measures, established the initial access vector from its audit data (3), notified all identified recipients of the send (5), and published a customer-facing notice (7) — privately on 2026-08-07 and then publicly on its own domain on 2026-08-12. Its public notice states that "all active sessions and account authorizations were revoked" within approximately two hours, which addresses (1); v1.3 and v1.4 of this advisory recorded (1) as unaddressed, which was correct on the evidence then available. (2) stays open: revoking sessions and authorisations does not remove mailbox forwarding rules or delegated access, which survive a password reset, and no statement we have mentions them. See Vendor response. We have not verified this work and are not in a position to; we record what the vendor states. The list is left standing unedited, because its value is now to the next organisation that finds itself here.
Our evidence establishes that one mailbox on the airdroid.com domain was under adversary control on 2026-08-06. It establishes nothing beyond that. Specifically, we did not find, and we do not assert, any of the following:
T1111 is listed on that basis only — not as an observed technique.Scope beyond a single mailbox is not established by our evidence. Only Sand Studio's own Google Workspace audit logs can determine it. Any reporting that reads this advisory as a compromise of AirDroid the company, its products, or its user base is reading something we did not write and the evidence does not support.
Updated 2026-08-10. Sand Studio has since reported the outcome of that audit: unauthorised access limited to the one employee mailbox, with no evidence of access to other company resources, AirDroid products or customer data. That is the vendor's finding from data we cannot see, and we publish it as such. It is not a confirmation of the paragraph above, and we are not presenting it as one. We concluded that we could not see beyond one mailbox; the vendor asserts that there was nothing beyond one mailbox. Those are different claims, and only the second is a finding about scope. The paragraph above stands unchanged, because what our evidence establishes has not changed. See Vendor response.
"I challenged that mailbox at 14:45. Seven minutes later someone quoted my own words back at me and told me to go log in. A spoofing attacker never sees that message. Whoever wrote back was sitting in the mailbox, reading mail as it arrived."
Daniel Wilson Kemp — Founder & CEO, Lifted Holdings LLC
"The headers are unambiguous about one thing and silent about everything else. They prove the mail was sent from an authenticated session inside that tenant. They cannot tell you how the session was obtained, and they cannot tell one compromised mailbox from fifty. Anyone reading a DKIM pass as evidence of a company-wide breach is reading something that is not there."
Daniel Wilson Kemp — Founder & CEO, Lifted Holdings LLC
"If one of your people clicked this, resetting the password is not containment. The session cookie is what the attacker wants, and it survives a reset. Revoke the sessions and the OAuth grants first, then reset the password. In that order."
Daniel Wilson Kemp — Founder & CEO, Lifted Holdings LLC
"The victim's address is handed forward after the hash, so it never reaches a server log. If you hunt only on the URLs your proxy recorded, you will undercount who was targeted."
Daniel Wilson Kemp — Founder & CEO, Lifted Holdings LLC
"We proved one compromised mailbox. Not a breached company, not a breached product, not one affected end user. I would rather publish a narrow claim I can defend line by line than a wide one that falls apart the first time a reporter checks it."
Daniel Wilson Kemp — Founder & CEO, Lifted Holdings LLC
"We pay for AirDroid Business. That is exactly why this went to incident response at 15:09 UTC instead of into the spam folder. A vendor's mailbox is part of my attack surface whether I like it or not."
Daniel Wilson Kemp — Founder & CEO, Lifted Holdings LLC
Lifted Holdings LLC is a payments and technology company based in Tennessee, operating across merchant payments and connected-device platforms (liftedholdings.com, liftedpayments.com, agevend.com). Lifted Holdings is an active AirDroid Business customer, using the platform for fleet management of Android-based vending endpoints — which is why this incident was handled as vendor-supply-chain risk rather than as inbound spam.
The discovery, investigation, payload analysis, and this advisory are the work of Daniel Wilson Kemp, Founder & Chief Executive Officer, Lifted Holdings LLC. He is available for technical follow-up and for verification of any indicator published here.
v1.5 2026-08-12 15:45 UTC Public notice; advisory concluded on our side. Sand Studio
published a security notice on airdroid.com at 11:32:13 UTC,
23h55m after we declined to accept mail from the affected tenant
as disclosure and asked for a statement on a company-operated
surface. Retrieved and verified it directly (HTTP 200,
Last-Modified header), recorded what it adds - sessions and
authorisations revoked, the upstream phishing mail that started
it, notification of that upstream organisation - and what it does
not do: no indicators, no recipient count, no mention of
forwarding rules or delegated access. Recorded that the page is
noindex and is absent from the sitemaps and the Security Center
index, so it is publicly reachable but not publicly discoverable.
Resolved the provenance question on the basis of corroboration
across a second, independently controlled surface, while stating
that no voice confirmation was ever obtained. No finding,
indicator or conclusion was changed; Section 10 is untouched.
v1.4 2026-08-10 14:10 UTC Provenance. Ran header authentication on every message received
from airdroid.com during the incident window. All pass - and so
does the phishing message, which is the point: tenant
authentication cannot separate the vendor from an adversary
holding tenant access. Corrected v1.3, which described the
2026-08-07 02:30 message as coming from "the recovered mailbox";
it came from the COMPROMISED mailbox and is not attributable to
the account holder. Recorded that the vendor's customer notice was
a private BCC, not a public disclosure, and that no public
statement exists on the vendor's newsroom or security page as of
this date. Recorded that no message has been confirmed out of
band. No finding, indicator or conclusion was changed at the
vendor's request, then or now.
v1.3 2026-08-10 09:00 UTC Vendor response. Added a "Vendor response" subsection to Section 3: the disclosure
timeline from 2026-08-07, Sand Studio's customer-facing security
notice quoted in full, and the vendor's account of its
investigation, containment, recipient notification and upstream
notification. Updated the status line, Section 9 and Section 10,
and the two paragraphs of Section 3 that stated no substantive
vendor response had been received - true at publication,
superseded on 2026-08-07. Corrected the elapsed time from our
disclosure to that response (18h13m, not 21h17m, which is
measured from the send). No observation, indicator or finding in
this advisory was changed.
v1.2 2026-08-06 21:25 UTC Added third-party corroboration (public urlscan.io scans for
both stages, VirusTotal 5/92) and the Google Safe Browsing
coverage gap. Noted that a VirusTotal record already existed
five minutes after the send, filed by another party.
v1.1 2026-08-06 19:48 UTC Correction. Withdrew the stage-2 per-IP cloaking finding after
re-testing from a second egress showed the resets were in-path
filtering on our own network, not attacker behaviour. Replaced
with the directly observed Cloudflare Turnstile gate. Corrected
the urlscan.io novelty claim (one prior record exists, dated
2026-07-31, which did not capture the payload). Added related
deployments of the same kit path on unrelated hosts.
v1.0 2026-08-06 19:12 UTC Initial publication.