An iPhone cyberweapon reportedly developed in part at L3Harris’s Trenchant division ended up in Chinese criminal campaigns targeting cryptocurrency wallets. Coruna, a kit for breaking into iPhones, was being used to hunt wallet secrets. A stolen recovery phrase could give the thief control of a victim’s bitcoin or other cryptocurrency.
How it passed between those users remains unresolved. What emerged at the criminal end of the trade, however, is available to inspect. I followed exploit files captured from an Italian nail-products website into public packages containing a reseller dashboard, a commission-rate field, an imitation Apple login page, and parsers for stolen wallet data. Integration and support were advertised for 5,000 USDT.
Parts of those packages matched the capture byte for byte. The code shows how circulating exploit material was being assembled into a business: assign devices to reseller accounts, collect their files, extract wallet secrets, and offer help finishing the integration. The capture does not establish a completed theft from a particular wallet or identify every handoff along the way.

The supplied Coruna-v2 dashboard includes reseller management (代理商管理) alongside collection, channels, and commands. Its displayed counters are part of the repository screenshot, not a measurement of this campaign. Original screenshot.
A shop website with two exploit routes
The investigation began with an archive containing group.html and three scripts from estrosa[.]it. The landing page selected between two exploit frameworks using the browser’s reported iOS version. One branch closely matched Coruna, an older iOS kit. The other matched a modified DarkSword chain.
The files sat under /js/analystic/assets/js/, a directory name resembling an analytics component. Passive urlscan records put the same path and kit on at least nine websites, with captures beginning October 12, 2026; the two most recent, both French small-business sites, appeared in scans on October 21 while this article was being prepared. Those records establish a deployment footprint. They do not establish when the sites were first compromised or how their ordinary pages sent visitors to the landing page. The complete site list is in the IOC dump at the end.
The landing page is a stager: it chooses which loader to fetch, and that loader selects the exploit stages. The two branches lead to different payloads. DarkSword includes a SpringBoard implant in the recovered code. Coruna reaches a native stager whose final core payload was not captured.
An unresolved website entry leads to group.html, which chooses by reported iOS version. The Coruna branch selects browser and pointer-authentication exploits, native bundles and a dispatcher, then CorePayloadManager. Its requested runtime configuration and core payload were not recovered. The DarkSword branch selects browser and pointer-authentication exploits, escapes WebContent into GPU and then mediaplaybackd, and runs a kernel privilege stage containing a SpringBoard implant. That implant collects data and exchanges tasking and uploads with btrf36[.]cc. This is intended control flow recovered from files, not an observed infection.
The delivery website serves the stages. The separate backend at btrf36[.]cc receives the landing page’s site beacon at /hx; the DarkSword implant polls /beacon and uses reporting and upload routes including /result, /aa, /uu, and /qq. Shared infrastructure does not make the two branches the same implant. Coruna’s later core and its behavior remain outside this capture.
The retained acquisition contains 54 response bodies, including the named exploit stages, encrypted configuration, and native payloads. For this article I inspected those files and public comparison repositories statically. I did not run the exploits or contact their infrastructure.
L3 bought the businesses that became Trenchant
The history spans a corporate acquisition, an insider theft, public exploit research, and later retail packaging. Select a date to read its evidence and limits; the line orders records without asserting how the code changed hands.
Ten dated records connect the article's corporate, court, research, repository and capture context in chronological order. Expand a station for details. Spacing is ordinal, not elapsed time, and the line does not establish a Williams-to-Coruna or retailer-to-operator transfer.
View source values
| Date / record | Event | Context and limits |
|---|---|---|
| 2018-08 / SEC | L3 buys two firms | L3 buys Azimuth and Linchpin, renames them Trenchant: $200m before acquired cash, about $185m net; up to $31m depends on later sales. |
| 2022–25 / DOJ | Components stolen | Williams steals at least eight exploit components. Contracts total up to $4m; $1.3m is received. Initial delivery and support are separately priced. |
| 2024-10 / COURT | An insider oversees inquiry | Trenchant identifies a leaked component by vendor data. Williams oversees the inquiry without disclosing his own theft. |
| 2025 / GTIG | Coruna changes users | GTIG observes surveillance-customer use, suspected Russian espionage and financial attacks from China. The transfer mechanism is unknown. |
| 2026-02-24 / DOJ | Williams sentenced | Williams receives 87 months. Treasury says Operation Zero resold stolen tools to an unauthorized user; no connection to this capture is proved. |
| 2026-03 / REPORTS | Coruna research published | GTIG publishes its Coruna investigation, documenting use by different actors while leaving the mechanism of proliferation unresolved. |
| 2026-03 / PUBLIC CODE | DarkSword code circulates | March public repositories preserve DarkSword material. Its developer is not established here; do not assign its origin to Trenchant. |
| 2026-07 / RETAIL | PROV2 advertises support | PROV2 advertises a full version and support. Its retained July README contains the offer; no completed sale is established. |
| 2026-08 / RETAIL | Coruna-v2 integration offer | Coruna-v2 advertises 5,000 USDT for integration and one iOS-version adaptation. It includes channel, reseller and wallet-management code. |
| 2026-10 / CAPTURE | Shop-site files match | Captured configuration and payload bytes match public trees. This establishes shared material, not a seller-to-operator handoff or infection. |
| Date / record | Event | Context and limits |
|---|---|---|
| 2018-08 / SEC | L3 buys two firms | L3 buys Azimuth and Linchpin, renames them Trenchant: $200m before acquired cash, about $185m net; up to $31m depends on later sales. |
| 2022–25 / DOJ | Components stolen | Williams steals at least eight exploit components. Contracts total up to $4m; $1.3m is received. Initial delivery and support are separately priced. |
| 2024-10 / COURT | An insider oversees inquiry | Trenchant identifies a leaked component by vendor data. Williams oversees the inquiry without disclosing his own theft. |
| 2025 / GTIG | Coruna changes users | GTIG observes surveillance-customer use, suspected Russian espionage and financial attacks from China. The transfer mechanism is unknown. |
| 2026-02-24 / DOJ | Williams sentenced | Williams receives 87 months. Treasury says Operation Zero resold stolen tools to an unauthorized user; no connection to this capture is proved. |
| 2026-03 / REPORTS | Coruna research published | GTIG publishes its Coruna investigation, documenting use by different actors while leaving the mechanism of proliferation unresolved. |
| 2026-03 / PUBLIC CODE | DarkSword code circulates | March public repositories preserve DarkSword material. Its developer is not established here; do not assign its origin to Trenchant. |
| 2026-07 / RETAIL | PROV2 advertises support | PROV2 advertises a full version and support. Its retained July README contains the offer; no completed sale is established. |
| 2026-08 / RETAIL | Coruna-v2 integration offer | Coruna-v2 advertises 5,000 USDT for integration and one iOS-version adaptation. It includes channel, reseller and wallet-management code. |
| 2026-10 / CAPTURE | Shop-site files match | Captured configuration and payload bytes match public trees. This establishes shared material, not a seller-to-operator handoff or infection. |
L3’s 2018 quarterly report records the Azimuth and Linchpin acquisition and their renaming as Trenchant: $200 million before acquired cash, approximately $185 million net, plus up to $31 million tied to later sales.
L3 described the acquisition as strengthening its command, intelligence, surveillance, and related capabilities. Its preliminary accounting assigned $98 million to intangible assets, principally technology and customer relationships. These were businesses with products, customers, and sales targets, acquired as part of a defense contractor’s growth strategy.
L3 and Harris completed their merger on June 29, 2019, forming L3Harris Technologies.
The subsequent criminal case against Trenchant’s former general manager, Peter Williams, describes how that product business operated. Exploit software could be sold as a complete product or as component subsets, with updated versions distributed to customers. Access was restricted, and contracts limited use and redistribution. The customers were trusted governments. Those details appear in the statement of offense Williams signed.
In October 2024, the company learned that one of its protected components was being offered by another vendor. Its own embedded vendor data helped establish the match. Williams oversaw the internal inquiry. He also had super-user access to the company’s protected products and network records. He did not disclose his own theft to the investigator or his employers, according to the same court document.
Prosecutors said Williams stole at least eight exploit components between April 2022 and August 2025. Intended exclusively for the U.S. government and selected allies, they were sold to a Russian broker under agreements covering both initial delivery and follow-on support.
Before sentencing, Williams described professional pressure and anxiety in a February 5 letter to Judge Loren L. AliKhan. He accepted responsibility for his decisions and acknowledged that those pressures did not excuse them. His attorney’s sentencing memorandum called the episode “an unfortunate period of extraordinarily poor judgment exacerbated by severe job stress and exhaustion.”

A cropped phrase from page 1 of Williams’s letter, dated February 5, 2026 and filed February 10 as Document 23-1. Read the full two-page letter.
The Treasury Department identified the broker as Operation Zero and said it resold the stolen tools to at least one unauthorized user. Treasury’s account establishes an onward sale beyond the initial theft. It does not identify that user as the operator of the files I examined.
Where Coruna enters the record
Google Threat Intelligence Group documented Coruna’s movement during 2025 from a surveillance-vendor customer’s targeted operation to suspected Russian espionage and then financially motivated activity from China. Google explicitly left the mechanism of that proliferation unresolved.
The Williams case provides a documented example of restricted exploit components escaping into a resale market. The Coruna reporting describes a kit moving between very different users. The available evidence does not establish that Williams’s sales caused Coruna’s spread. Filling that gap would turn two supported accounts into an unsupported chain of custody.
DarkSword has its own published exploit-chain analysis; its presence beside Coruna does not give every component the same origin. Public repositories preserved material from both kits and added deployment tools. In the retained history, scripts for serving payloads were followed by packages with an administrative application and database.
By July, a repository called DarkSword-PROV2 advertised a full version and technical support. An August repository from the same organization, Coruna-v2, offered integration and adaptation for one iOS version at a stated price of 5,000 USDT. Both carried authorized-research disclaimers.

The supplied DarkSword-PROV2 panel turns collection and tasking into buttons. The visible rows say “waiting to execute” (等待执行), and the exploitation status says “waiting for exploitation” (等待利用). These are interface claims and queued jobs, not verified results. Original screenshot.
The seller was advertising help integrating circulating exploit material into a usable system. The README establishes an asking price; I found no transaction record tying the seller to this deployment. Connecting the retail package to the shop-site files still required a byte comparison.
The recovered exploits and their CVEs
The capture preserves both exploit branches, including 13 older JavaScript modules and the newer browser, sandbox, and privilege-escalation stages. The table distinguishes a recovered artifact from its vulnerability assignment. Published association means the mapping comes from public lineage or module-role comparisons; inferred adds mechanism evidence from this capture. Neither means I ran the exploit successfully. Target iOS ranges are published module ranges unless labeled as captured profiles; they are not device compatibility tests.
| Recovered stage | Target iOS | Captured file or module | CVE and mapping |
|---|---|---|---|
| Coruna: buffout browser exploit | 13.0–15.1.1 | 5ff38f53…js / 7d8f5bae… | CVE-2021-30952 — published association |
| Coruna: jacurutu browser exploit | 15.2–15.5 | 46ecd515…js / ea3da0cf… | CVE-2022-48503 — published association |
| Coruna: bluebird browser exploit | 15.6–16.1.2 | ff4f3cb4…js / d11d34e4… | No CVE listed in GTIG’s mapping |
| Coruna: terrorbird browser exploit | 16.2–16.5.1 | 8c4451cf…js / 57cb8c64… | CVE-2023-43000 — published association |
| Coruna: cassowary browser exploit | 16.6–17.2.1 | 6beef463…js / e3b6ba10… | CVE-2024-23222 — published association |
| Coruna: breezy pointer-authentication bypass | 13.0–14.x | 3bc0f686…js | No CVE listed in GTIG’s mapping; inferred module assignment |
| Coruna: breezy15 pointer-authentication bypass | 15.0–16.2 | f6377d5d…js | No CVE listed in GTIG’s mapping; inferred module assignment |
| Coruna: seedbell pointer-authentication bypass | 16.3–16.5.1 | 17480ecc…js | No CVE listed in GTIG’s mapping; inferred module assignment |
| Coruna: seedbell_16_6 pointer-authentication bypass | 16.6–16.7.12 | 3fd66b32…js | No CVE listed in GTIG’s mapping; inferred module assignment |
| Coruna: seedbell_17 pointer-authentication bypass | 17.0–17.2.1 | 4a75f055…js | No CVE listed in GTIG’s mapping; inferred module assignment |
| Coruna: configured native bundles | 13.0–17.2.1 family; individual bundle ranges unresolved | 29 recovered payload containers | Not individually mapped to CVEs here; containers also hold loaders and helpers |
| DarkSword: generic JavaScriptCore browser exploit | 18.4–18.5 published; 18.5 normal RCE profiles* | a13e3e4525e28ff8.js | CVE-2025-31277 — published association; distinct trigger traced locally |
| DarkSword: integrated JavaScriptCore worker | 18.6–18.7 family; captured profiles: 18.6, 18.6.1, 18.6.2; special 18.1.1 route* | e1105852cab6ef49.js | CVE-2025-43529 — high-confidence inferred correspondence to the DFG garbage-collection fix |
| DarkSword: user-mode pointer-authentication bypass | 18.4–18.7 family; captured continuation depends on the selected RCE profile | 8150b44e89f06890.js / integrated worker | CVE-2026-20700 — published association; not independently verified against the fix |
| DarkSword: WebContent-to-GPU escape | Captured profiles: 18.4, 18.4.1, 18.5, 18.6, 18.6.1, 18.6.2* | 717d3ef037488de5.js | CVE-2025-14174 — published association with sbx0_main.js |
| DarkSword: GPU-to-mediaplaybackd escape | Captured profiles: 18.4, 18.4.1, 18.5, 18.6, 18.6.1, 18.6.2* | e698499e769d1643.js | CVE-2025-43510 — published association with sbx1_main.js |
| DarkSword: kernel privilege escalation | 18.4–18.7 published family; captured stage coverage not independently established | e0e65d55905b9342.js | CVE-2025-43520 — published association with the PE stage |
CVE assignments come from GTIG’s Coruna table and DarkSword analysis, checked against the retained files and public counterparts. The older module IDs also agree with littlelailo’s Coruna analysis. The integrated worker’s strongest local match is to WebKit’s DFG store-barrier fix. Several sandbox and native-stage assignments still lack that level of verification; missing CVEs are not evidence of new zero-days.
The generic RCE file names 18.4/18.4.1 but lacks matching RCE profiles. Both RCE files contain an 18.1.1 record; the loader selects the integrated worker for that version, and both downstream sandbox tables lack its profile. Neither path establishes a working full chain. The 18.7 range comes from published DarkSword research; this capture’s listed profiles stop at 18.6.2.
The configuration matched exactly
The strongest match was a 2,192-byte configuration recovered by decoding the captured Coruna data. The retail repository carried an identical file under its payload tree. Their SHA-256 digest was:
1c690a980611a4fd8ab3681c871b9b131061511b0c1b9bc30189caa08fe1bced
The retail tree also contained matching payload content and the same salt used to derive resource names. This was a connection through actual bytes and configuration, beyond the reuse of a family name or a familiar directory structure.
But the configuration was not exclusive to the retailer. I independently checked two other retained public Coruna trees and found the captured encrypted configuration there too, unchanged. Public availability makes copying an entirely plausible explanation for the overlap.
There was a smaller DarkSword match as well: an 85-byte placeholder module shared by the captured deployment and DarkSword-PROV2. That exact match is reproducible, but a tiny shared placeholder says little about the identity of whoever deployed the surrounding chain.
The October deployment could have used the retail package, another copy of the same material, or a common upstream source. The files do not choose among those explanations. They do let us inspect the surrounding retail software as a concrete example of how this exploit material was being packaged.
The panel divides the work among resellers
In the retained Coruna-v2 source, an Agent is an account in the management application. Its database record includes max_devices and commission_rate, alongside contact details and two-factor authentication settings. Devices and traffic channels carry an agent_id. Channel records have their own identifiers, API keys, and landing-template associations.
The relationships continue into the request handlers. The reseller device view filters records by the signed-in account. Its collection view joins uploaded files to devices assigned to that account. Other handlers return its channels, pending commands, and activity counts.

The channel editor packages delivery as an embed: choose a template, generate code, copy it into a page. This supplied example uses a localhost address and an Apple ID login template. It does not establish how visitors reached the October shop-site landing page. Original screenshot.
The source models a division of access: one service can hold records for multiple resellers while presenting each with their assigned devices and collected material. The commission field indicates an intended commercial relationship, although I found no basis here for claiming commissions were paid or automatically settled.
The wallet section lists collected files by wallet category, groups them by application, and includes parsing paths for recovery phrases, private keys, and addresses. A recovery phrase can restore control of a cryptocurrency wallet; extracting it is a much more specific objective than collecting generic device telemetry.

The supplied wallet view makes the intended output explicit: recovery phrases, private keys, addresses, and an associated device. All six wallet counters are zero and the table is empty. Original screenshot.
These are source-level capabilities; I did not launch the panel. Censys separately documented combined Coruna/DarkSword distribution and a reseller model in another captured platform.
Collection is organized around wallets, with broader reach
The captured DarkSword branch contains a large agent intended to run inside SpringBoard, the iOS process responsible for the home-screen interface. Its structure overlaps the P7 variant previously described by iVerify. That is a lineage assessment based on code, not an attribution of this campaign to the operators in that report.
The automatic path checks 37 wallet bundle identifiers. Wallet recognition and an inventory acknowledgment gate some uploads; Notes and heavy keychain processing have different rules.
After registration and app scanning, Notes collection is attempted independently of wallet recognition. A wallet hit plus inventory acknowledgment enables wallet archive upload, an early keychain wait, thumbnails, and a final completion wait before commands. A miss or unknown result skips those gated uploads and proceeds to commands.
The companion privilege-stage code leaves heavy keychain processing enabled even without a wallet hit. Its selection rules include authentication, browser, mail, and other account material as well as wallet-related entries.
The pipeline also depends on coordination between separate pieces of code. One writes an early .wallet marker and a later .done marker; another waits for them. In the captured source, a failure after the early marker can leave the agent waiting for final completion while continuing to beacon. Seeing that traffic would not, by itself, prove collection finished or that normal command dispatch had begun.
The debug log’s completion message was misleading
The retail repository included a debug transcript, internally dated August 8. It named the same configuration and a payload container present in this investigation.
The transcript records five attempts to obtain a task port for another process. Each returns 5, with no usable port. The code’s diagnostic interprets those failures as a sandbox denial and stops that attempt. It then records that remote injection was skipped because the target task port was unavailable.
The next status message says, in translation, that the injection layer is complete.
Payload downloading and container assembly continue afterward. Those later steps do not turn the skipped injection into a successful one. The transcript establishes what its author recorded, including those payload names and the failed attempt. Its internal timestamp is not an independently verified event date, and it is not a device capture I made.
That is also why I would not use the committed database’s user-agent strings to announce support for a newer iOS release. The strings are stored claims about clients. They do not demonstrate an exploit running on those versions.
The October files’ version tables extend beyond A12 devices, but some routes have gaps between the selected profile and the metadata required by later stages. A version label in a menu, table, or log is not an end-to-end compatibility test.
The missing core
This investigation does not establish a new iOS vulnerability, a successful infection of a shop visitor, or a new operator identity.
The captured Coruna branch includes a native loader designed to fetch an encrypted configuration, download and verify more code, and inject it into another process. It also contains code to monitor the downloaded component and attempt recovery after failure. The server’s actual configuration, core payload, and app modules remain unobserved.
IOC dump
Indicators below come from this investigation’s captures and passive records; domains are defanged. The list is current as of October 21, 2026, and the delivery-site footprint was still growing when this was published.
- Delivery sites, by first passive capture:
sielmann[.]de(Oct 12),mebel[.]store(Oct 13),tihsa[.]comandalpinstore[.]com(Oct 14),interdistribution[.]ca(Oct 15),estrosa[.]itandsweeper-engine[.]com(Oct 19),jardinmarket[.]comandacaris[.]fr(Oct 21) - Kit path:
/js/analystic/assets/js/(one site uses/img/analystic/assets/js/); redirect target/404.html; disabled-by-default debug endpoint/log.html - C2:
btrf36[.]cc→47[.]76[.]30[.]227(Alibaba, Hong Kong). Landing beacon/hx; implant routes/beacon,/result,/aa,/uu,/qq,/heartbeat - Landing and stage filenames:
group.html; initial scriptsa8c3f01e6b47d295.js,b8def7dab9dd9ad8.js,49554fde7424c31c.js; newer initial modulese1105852cab6ef49.js,455b474ef0843d25.js,8150b44e89f06890.js,a13e3e4525e28ff8.js; deeper stages717d3ef037488de5.js,e698499e769d1643.js,e0e65d55905b9342.js; encrypted configuration7a7d99099b035b2c6512b6ebeeea6df1ede70fbb.min.js - Landing set SHA-256:
2af55f5c00efad5e4d7547ca5153285db8a5d9e885d09d11fe85243faf8a11cf(group.html),19380347b2cb20a40469a6de4ebbf6fcfddff551e9f5d5ecd657f2957d82042a(beacon),d86a69137cda7c4e6caab58ccf66eb59a6f68282b2e10fcd186a7b8c5af3b710(loader),e9b106745a31d7ad4095dd87cf8f915cf600f929b6930b9ff3534826c649f803(module framework) - Newer-chain SHA-256:
5856c2c59ffcbe6b82f49ec94517463dc764cfe43333a7313c49a11c1c7934de(18.6 worker),37efaa4237a28a4be411d40de80b2935be5b8c4e6731ee1f858c609142a87445(85-byte placeholder),df86db89f7f965fc117d4c14b722d3d02f1d1de5c6ec216bb59fcf2736374caa(default worker),3196034ef1196c9151395859019674e14e3c06e3fdbf230c7e0d0c5f6211824a(default RCE module),9c7f86f2b82df171a09f096afcd8fa5b6b24f0b643aae765ad17ecf80dadb196(memory-primitives stage),6db7114ed9e8a89a75d11930d348ebd6c3bd52572238191c3116b100e8963a98(GPU escape),da3fe94ac1ffe0ae01adfab6d5e6cd58933e93853c4b6e664f76ca468981bb02(kernel stage with SpringBoard agent) - Configuration hashes:
c46f10963abb667af65d53e9b1d867ae8f8e0243de5ca45dd5ead3931dd61056(raw encrypted config as served),1c690a980611a4fd8ab3681c871b9b131061511b0c1b9bc30189caa08fe1bced(decoded, as cited above),33d60d42472a83d0d2cf4ee6640c615313c29b18ce1e8ab06e41f4bba558a34b(original sample zip) - Browser storage markers:
sessionStorage['_x_nav'](eight-second re-entry throttle),localStorage['_x_done'](per-origin completion marker),_x_ok;?force=1bypasses these guards - Build markers: resource-name salt
cecd08aa6ff548c2(truncated-SHA256 naming for the older branch’s modules),PE_BUILD = 20260914-aks40, and an unsubstituted{{LPE_64BITE}}template token in the GPU-escape stage - On-device artifacts, from MyCERT’s August advisory for the same chain:
/tmp/pe_worker_trace.log,/var/mobile/Media/PostLogs.txt,RemoteLog.log,ios_disk_scan.txt
Related infrastructure, from passive sources; roles unverified:
hjih9[.]com/tlslfc[.]cc— a Google-indexed kit directory replaced by a scam page mid-campaign;parkpeark[.]xyz— the August lure domain from MyCERT advisory MA-1480.082026- Same-provider cluster around the C2 box:
webim/xinim/ujkwl/adminemsd[.]blgim168168[.]com,blg88888[.]com,turtlesoup[.]cloud,lai09[.]top,luke616[.]xyz - March leaked-campaign hosts, from the captured-ITW repositories: kit host
static[.]cdncounter[.]net, implant C2sqwas[.]shapelie[.]com(ports 8881/8882)
I am deliberately not publishing a small set of indicators that appear to belong to infrastructure still being staged: releasing them now would tell the operators what is watched and prompt rotation before defenders benefit. They will be added once they rotate or are otherwise reported.