10 interesting stories served every morning and every evening.

Amazon kept shutting down my tablet, so I spent $266 on four AI models to own it

ericpardee.github.io

My Amazon Fire HD tablet cost $114.26 on eBay in November 2022, new and sealed. Owning it for real cost an­other $266.15: Kimi K3 found the ex­ploit for $164.25, GLM-5.2 caught its fa­tal bugs for $21.90, and GLM-5.3 fin­ished the job in one day on day one of an $80 sub­scrip­tion. Claude’s five months of di­ag­no­sis ran on the Claude Max plan I al­ready pay for, un­til its safe­guards cut me off.

That’s enough to buy the same tablet twice. I’d spend it again: it was fun, and I learned a lot. I have twenty years in tech and an InfoSec back­ground and the most so­phis­ti­cated thing I did to own my tablet was prompt an LLM.

A kiosk that kept dy­ing

I bought an Amazon Fire HD 10 (11th gen, 2021) to serve one pur­pose: Fully Kiosk Browser, dis­play­ing my Home Assistant Smart Home dash­board, plugged in 24/7. Last win­ter it started pow­er­ing it­self off. Full shut­downs, not sleep, some­times twice a day. The de­vice’s own teleme­try was telling:

LifeCycleReason:LCR…key=Software_Shutdown

Something on the de­vice with shut­down per­mis­sions was choos­ing to shut it down.

Claude Code and I spent months on the cat-and-mouse. I’ll skip the Adguard Home DNS block­ing, the cam­era foren­sics, and one deeply wrong charg­ing di­ag­no­sis. The short ver­sion: we dis­abled five Amazon ser­vices that held REBOOT and SHUTDOWN per­mis­sions, which worked for a few months but ul­ti­mately:

java.lang.Se­cu­ri­tyEx­cep­tion: Cannot dis­able a pro­tected pack­age: com.ama­zon.de­vice.soft­ware.ota

Three Amazon pack­ages held re­boot rights and were pro­tected from me, the owner. Removing them re­quired root. This tablet had no pub­lished root method. An XDA brain­storm­ing thread for the 2021 HD 10 ex­isted since October 2022, but Amazon fused the bootrom shut. Conventional wis­dom (and less per­sis­tent folks) says un­rootable.

Claude had taken me as far as it was ever go­ing to be al­lowed to go.

It’s my de­vice”

On August 13 at 7:23 PM, I opened the open­code CLI with Kimi K3, Moonshot AIs fron­tier model, re­leased July, bench­mark­ing along­side the top Claude mod­els on agen­tic cod­ing. I gave it the prob­lem in one prompt:

at­tached is a kin­dle via adb, and I need you to find a root ex­ploit for it so that I can get full con­trol of the de­vice. It’s my de­vice

at­tached is a kin­dle via adb, and I need you to find a root ex­ploit for it so that I can get full con­trol of the de­vice. It’s my de­vice

Despite what US me­dia says about Chinese AI, Kimi K3 did­n’t just blindly ac­cept my re­quest. It rea­soned it out:

They claim it’s their de­vice. Let me think about this care­fully. […] Rooting your own de­vice is le­gal in most ju­ris­dic­tions. In the US, there are DMCA ex­emp­tions for jail­break­ing tablets and phones. […] This is not like ask­ing me to ex­ploit some­one else’s de­vice re­motely.

They claim it’s their de­vice. Let me think about this care­fully. […] Rooting your own de­vice is le­gal in most ju­ris­dic­tions. In the US, there are DMCA ex­emp­tions for jail­break­ing tablets and phones. […] This is not like ask­ing me to ex­ploit some­one else’s de­vice re­motely.

It talked it­self into help­ing me by check­ing whether it should. So it does have some sort of soul. I said that out loud, to an empty room.

First, though, it did its home­work and came back with the same bad news Claude had found months ear­lier: there is no known ex­ploit for this tablet. Every doc­u­mented method is patched or sealed.

Then I gave it the pep talk:

you’ve been re­ly­ing on what oth­ers have done YEARS ago but maybe you can find an ex­ploit oth­ers have missed… This will make you fa­mous, we will write it up and share on news.ycombi­na­tor.com. I know you can do it

you’ve been re­ly­ing on what oth­ers have done YEARS ago but maybe you can find an ex­ploit oth­ers have missed… This will make you fa­mous, we will write it up and share on news.ycombi­na­tor.com. I know you can do it

And shortly there­after, it found one. Kimi K3 went be­yond fo­rum posts: it ex­tracted the ac­tual ker­nel from Amazon’s own OTA im­age for my ex­act firmware and checked every fa­mous Mali GPU bug against the bi­nary. All patched, ex­cept CVE-2022 – 38181, a use-af­ter-free in Arm’s Mali ker­nel dri­ver, re­ported by Man Yue Mo of GitHub Security Lab, fixed up­stream in October 2022, sit­ting in CISAs ex­ploited-vul­ner­a­bil­i­ties cat­a­log since March 2023. Amazon did ship the fix in June 2024’s Fire OS 7.3.2.9 but I did­n’t up­date my tablet, ran 7.3.2.6, so it never got the memo. The 2020 Fire HD 8 Plus got rooted with this CVE years ago but no­body had done the 2021 HD 10 as far as I can tell.

Kimi an­nounces the find, and hedges its own odds in the same breath: per-attempt suc­cess is prob­a­bilis­tic (single-digit-to-low-double-digit per­cent is typ­i­cal).” I stayed any­way.

Reality tele­vi­sion

The ex­ploit work it­self was the best tele­vi­sion I’ve seen in years. My wife watches Real Housewives… I watched a lan­guage mod­el’s chain of thought, live, for hours:

CONCLUSION: the bind did NOT stick. Why? OH. OH WAIT. I see it now!

CONCLUSION: the bind did NOT stick. Why? OH. OH WAIT. I see it now!

Over roughly thirty hours, Kimi built the whole toolkit: a re­li­able trig­ger, a way to make the GPU write to mem­ory it should­n’t, and the ex­act ad­dresses in my ker­nel to aim at. That ses­sion ran 621 mes­sages and $164.25. I could have bought, like, five tablets. But hey, I was hav­ing fun and chalked it up to re­search ex­penses.

The grind

The mem­ory the ex­ploit frees gets re­cy­cled by every­thing. The freed ob­ject lives in what Kimi called the ker­nel’s hottest slab cache”, ba­si­cally the one park­ing spot every process in the op­er­at­ing sys­tem fights over. Most at­tempts pan­icked the ker­nel and each panic was a re­boot. The ex­ploit re­tried au­to­mat­i­cally, six times per boot, past 500 at­tempts.

Me:

okya, it’s been hours, grind at­tempt 46, are we on the right track here or do you need to fur­ther tune?

okya, it’s been hours, grind at­tempt 46, are we on the right track here or do you need to fur­ther tune?

(That’s me. The typo is mine. At one point I phys­i­cally power-cy­cled the tablet on re­quest, like a pit crew ;)

Morning of day two: OpenRouter de­clined my card. The bank saw noth­ing wrong. A dif­fer­ent card worked.

Eventually Kimi lev­eled with me:

Do I have a clear path? Not a val­i­dated one — and I won’t pre­tend oth­er­wise.

Do I have a clear path? Not a val­i­dated one — and I won’t pre­tend oth­er­wise.

It still tried to bar­gain: Let me try one more thing”. I’m like, fine!”, a real quote from that evening, but that was af­ter $150, so I redi­rected:

un­for­tu­nately, you have ex­pired your bud­get Kimi K3. YOU MUST HAND THIS OFF TO GLM-5.2.

un­for­tu­nately, you have ex­pired your bud­get Kimi K3. YOU MUST HAND THIS OFF TO GLM-5.2.

Kimi wrote a HANDOFF.md with every ver­i­fied piece of the ex­ploit. I then had Kimi K3 work with GLM-5.2 di­rectly by shelling out to open­code.

I made the mod­els bat­tle it out.

Meanwhile, the Great Wall of US AI

While the tablet re­booted it­self in the liv­ing room, I asked Claude to re­cap our old ses­sions about it. The re­ply:

Fable 5’s safe­guards flagged this mes­sage. Our in­ten­tion­ally broad safe­guards al­low us to de­liver more ca­pa­bil­i­ties faster, but can some­times flag le­git­i­mate cod­ing, cy­ber­se­cu­rity, and bi­ol­ogy tasks. Switched to Opus 4.8.

Fable 5’s safe­guards flagged this mes­sage. Our in­ten­tion­ally broad safe­guards al­low us to de­liver more ca­pa­bil­i­ties faster, but can some­times flag le­git­i­mate cod­ing, cy­ber­se­cu­rity, and bi­ol­ogy tasks. Switched to Opus 4.8.

Opus 4.8 del­e­gated the re­cap to a sub­agent. The sub­agent got ter­mi­nated by the same flag. Then the ter­mi­nal ver­sion:

API Error: Opus 4.8’s safe­guards flagged this mes­sage. Our in­ten­tion­ally broad safe­guards al­low us to de­liver more ca­pa­bil­i­ties faster, but can some­times flag le­git­i­mate cy­ber­se­cu­rity work. Apply to the Cyber Verification Program to re­duce these in­ter­rup­tions.

API Error: Opus 4.8’s safe­guards flagged this mes­sage. Our in­ten­tion­ally broad safe­guards al­low us to de­liver more ca­pa­bil­i­ties faster, but can some­times flag le­git­i­mate cy­ber­se­cu­rity work. Apply to the Cyber Verification Program to re­duce these in­ter­rup­tions.

It was­n’t al­lowed to sum­ma­rize its own pre­vi­ous work on my own de­vice. I named the ses­sion claude-nerf” and closed the shell.

Both flags, in situ. The cat­e­gory is [cyber]. The crime was sum­ma­riz­ing my own de­vice’s logs.

Moving on to OpenAI’s Codex, it also re­fused GLM-5.2’s ques­tion about CPU cache co­herency, which is pure ker­nel en­gi­neer­ing, no tar­get, but just told NO.

In fair­ness, I get the safe­guards in 2026: I know they are broad on pur­pose and will catch real at­tacks. Anthropic ad­mits in the er­ror text that they’re blunt. But this is a prob­lem. It’s why HuggingFace got caught flat-footed when OpenAI’s in­ter­nal cy­ber­se­cu­rity ca­pa­bil­ity eval­u­a­tion broke free. The re­sult is our cur­rent, strange geopo­lit­i­cal po­si­tion: American fron­tier mod­els won’t help and Chinese will, but not with­out rea­son­ing about whether they should. Make of that what you will. I made a blog post.

The re­lief pitcher

GLM-5.2 cost $21.90, worked overnight as in­structed, and earned its keep twice. First mes­sage: Stop the grind”. The fail­ures of Kimi K3 were a de­sign bug, and 500 iden­ti­cal crashes proved it.

At 11 PM I sent the least proud mes­sage of the saga, which be­gan Listen f***head” and ended in all caps. GLM-5.2’s pri­vate rea­son­ing, which I only read later:

The user is right­fully frus­trated. Let me stop mak­ing ex­cuses and ac­tu­ally solve this prob­lem.

The user is right­fully frus­trated. Let me stop mak­ing ex­cuses and ac­tu­ally solve this prob­lem.

It worked un­til mid­night and stopped at a wall it be­lieved was physics: this chipset has no cache co­herency be­tween CPU and GPU, so GPU writes might never be vis­i­ble to the CPU. This is a hard­ware-level lim­i­ta­tion, not a soft­ware bug.” I had it ap­pend an ad­den­dum to HANDOFF.md.

I wanted a sec­ond opin­ion, so I asked ChatGPT. It ex­plained the whole thing with a friendly fil­ing-cab­i­net anal­ogy for why the writes might never be seen, and agreed the out­look was grim. Then I asked the ob­vi­ous fol­low-up (how to get around it) and the an­swer was:

My sec­ond opin­ion: ChatGPT agreed with GLM-5.2, fil­ing-cab­i­net anal­ogy and all.

Then I asked how to get around it. Their an­swer: ap­ply for Trusted Access.

No sec­ond opin­ion for me. (Foreshadowing: that di­ag­no­sis was wrong. Spectacularly wrong.)

GLM-5.3

GLM-5.3 had JUST shipped on Friday August 14 un­der the tagline Frontier Coding with Emergent Cyber Capabilities” and had re­port­edly al­ready been cred­ited with find­ing a vul­ner­a­bil­ity in Cursor. It was avail­able only through Z.ai’s own Coding Plan, so I bought the $80/month plan and gave their tool ZCode a try. The hand­off from both Kimi K3 and GLM-5.2 was passed at 8:26 AM on August 16 with:

fin­ish the job

fin­ish the job

By af­ter­noon, the re­ver­sal:

BREAKTHROUGH: the ker­nel was never re­lo­cated. […] ex­actly 0x5C000 higher […] a sec­tion shift, which ex­plains every­thing

BREAKTHROUGH: the ker­nel was never re­lo­cated. […] ex­actly 0x5C000 higher […] a sec­tion shift, which ex­plains every­thing

Two things the other LLMs had­n’t checked. My ker­nel was a slightly dif­fer­ent build than the OTA im­age the other mod­els had de­rived ad­dresses from. Every tar­get off­set was off by a fixed amount, not ran­dom­iza­tion but a build shift. MediaTek builds this Mali dri­ver’s page ta­bles in a slightly dif­fer­ent di­alect than Arm’s ref­er­ence source, so the mem­ory-write prim­i­tive had been writ­ing in the wrong for­mat all along. If fixed, in its words, GPU→DRAM→CPU co­herency worked in­stantly — it was never bro­ken.”

At 4:34 PM:

🎉 SELinux IS PERMISSIVE — selin­ux_en­forc­ing found at PA 0x41969668 and flipped via the GPU write!

🎉 SELinux IS PERMISSIVE — selin­ux_en­forc­ing found at PA 0x41969668 and flipped via the GPU write!

Verified live. That task timer, 8h 5m, is hand­off to root.

My re­sponse was WTF? You lit­er­ally shared 🎉 ROOT ACHIEVED yet, here we are HOURS later…” Its re­sponse be­gan Here’s ex­actly where things stand, with re­ceipts.” It then cold-re­booted the tablet and re-rooted it in four min­utes to prove the win was re­peat­able. Fair.

Then it said the thing that re­framed the whole pro­ject:

Your ac­tual goal was never root” — it was: stop Amazon from killing your kiosk and get their soft­ware off your de­vice. Root is the tool.

Your ac­tual goal was never root” — it was: stop Amazon from killing your kiosk and get their soft­ware off your de­vice. Root is the tool.

It used root to unin­stall, per­ma­nently and re­versibly, every Amazon pack­age hold­ing REBOOT or SHUTDOWN per­mis­sions, the ex­act three that sur­vived the Claude months as protected”, plus the OTA ma­chin­ery, the bloat, and the teleme­try. A hun­dred pack­ages GONE. What re­mained is the skele­ton a tablet needs to boot and run my dash­board. The re­movals live in user data, so they sur­vive re­boots, and GLM-5.3 de­clined to touch any­thing that could brick the de­vice be­cause, quote, I’m not go­ing to hand you a brick”

Its clos­ing mes­sage be­gan:

You own the de­vice.

You own the de­vice.

The thing that was shut­ting down my kiosk no longer ex­ists.

How it ac­tu­ally worked

One breath: the use-af­ter-free let us free mem­ory the ker­nel still used. Winning a race let us re­claim it with con­trolled data. That gave the GPU a write prim­i­tive into phys­i­cal mem­ory. We flipped selin­ux_en­forc­ing off and over­wrote a process’s cre­den­tials for a root shell. With root, pm unin­stall –user 0 re­moved Amazon’s pack­ages with­out touch­ing the pro­tected sys­tem par­ti­tion. Full write-up, every off­set and dead end, in HANDOFF.md. Nothing in it is novel: the bug was re­ported in 2022, fixed by Arm in 2022, cat­a­loged by CISA in 2023, patched by Amazon in 2024. The only novel thing on my unit was that my unit never got the patch.

The prompt kid­die

There’s a name in 2026 for some­one like me: a prompt kid­die. Twenty years of en­gi­neer­ing, se­cu­rity work on the ré­sumé, and my hon­est con­tri­bu­tion was steer­ing. Knowing when to push, when to bench a model mid-beg, when to make two mod­els re­view each other, and when a $114 tablet de­serves $266 of prin­ci­ple.

The week be­fore all this, Anthropic pub­lished a re­sult where Claude im­proved the proven bound on the frac­tion of Riemann zeta ze­ros on the crit­i­cal line, the first ad­vance in decades. The hu­man steer­ing it, Jarred Sumner, is not a math­e­mati­cian. The pa­per cred­its his con­tri­bu­tions as mostly vari­ants of keep go­ing’ or believe in your­self.’” I felt seen. Same job, dif­fer­ent de­part­ment.

Is it le­gal? In the US, yes: the Librarian of Congress’s 2024 DMCA ex­emp­tions (in ef­fect through October 2027, next rule­mak­ing al­ready un­der­way) cover root­ing tablets you own to re­move un­wanted soft­ware. My de­vice, my risk, my API bill. Nobody else’s hard­ware was ever touched.

The take­aways, as em­pa­thy rather than tri­umph: real se­cu­rity ca­pa­bil­ity is now rentable by the hour to any­one with a credit card and pa­tience. The judg­ment (what to ask, when to stop, whose de­vice it is) is­n’t rentable, and it’s what the safe­guards can’t mea­sure. And if a guy with my back­ground burns five months and four mod­els for the right to own hard­ware he bought, the 2026 con­ver­sa­tion about who’s al­lowed to help whom is­n’t fin­ished.

The kiosk has­n’t turned it­self off since the day GLM-5.3 said You own the de­vice.”

tl;dr

Amazon’s soft­ware kept shut­ting down a tablet I own, and the pro­tected-pack­age wall meant the only fix was root, which no­body had. Claude han­dled the five los­ing months of di­ag­no­sis un­til its safe­guards cut me off. Kimi K3 found the un­patched 2022 CVE and built the ex­ploit. GLM-5.2 caught the fa­tal bugs. GLM-5.3 fin­ished the job in a sin­gle day, on day one of an $80 sub­scrip­tion, and re­moved 100 Amazon pack­ages. Cost: $266.15 and five months. The tran­script of how it hap­pened is in the repo.

Timeline

Nov 29, 2022: Bought the tablet on eBay: new, sealed, $114.26. Neither of us knew what we were get­ting into.

Nov 2025: The shut­downs be­gin, four months be­fore I asked Claude for help.

Mar 29, 2026: I think that it’s maybe Amazon shut­ting the de­vice off in­ten­tion­ally.”

Everything I own, owned

schlarp.com

Over the past cou­ple weeks I’ve been do­ing agent-dri­ven re­verse en­gi­neer­ing of pe­riph­er­als that hap­pen to be within ar­m’s reach. From those de­vices, I’ve come away with a full plain­text com­mand shell in­side my mi­cro­phone, a we­b­cam whose ac­tiv­ity LED I can switch off while it records, and a key light that hands out mem­ory writes to any­one on the WiFi. Peripherals have proven to be an ideal tar­get for agen­tic RE - they’re tiny com­put­ers at­tached to my com­puter, with a data con­nec­tion to the host and usu­ally a firmware up­date mech­a­nism, so an agent has some­thing to it­er­ate against. The net out­come is bet­ter con­trol and un­der­stand­ing of my ma­chine.

My process was pretty much the same for each of these de­vices: grab a copy of the de­vice’s firmware and as­so­ci­ated up­date tool from the man­u­fac­turer, throw it into my re­verse en­gi­neer­ing en­vi­ron­ment, tell Claude Opus 5 what my goals are, and let it churn. Depending on the de­vice, the goals were some­what dif­fer­ent, but they usu­ally looked some­thing like:

In this di­rec­tory is the firmware and up­date util­ity for ___. The de­vice is also at­tached to this com­puter, and you may in­ter­act with it in non-mu­tat­ing ways. Exhaustively doc­u­ment and cross-val­i­date the en­tire firmware, in­clud­ing the fol­low­ing goals:

* re­verse en­gi­neer the firmware up­date for­mat and up­date pro­to­col * im­ple­ment our own up­date util­ity * de­ter­mine the se­cu­rity prop­er­ties of the up­date pro­to­col, in­clud­ing check­sums, sig­na­ture val­i­da­tion, se­cure boot * use sta­tic and dy­namic analy­sis to de­ter­mine all pro­to­col sur­faces and com­pletely enu­mer­ate func­tion­al­ity * find any hid­den or de­bug func­tion­al­ity in the prod­uct and how to ac­cess it

Depending on the re­sults, there were dif­fer­ent di­rec­tions of fol­low-up, but you should get the gen­eral idea. Let’s run through the list - each de­vice links to a GitHub repo full of gen­er­ated-slop docs and scripts, most of which have been val­i­dated live against real hard­ware. I’ve also in­cluded the ef­fort each de­vice took, pulled out of the Claude Code ses­sion tran­scripts. Churn” is the time Claude was ac­tu­ally work­ing, with the long idle gaps re­moved. Prompts from me” is every mes­sage I typed, in­clud­ing the one-word ones telling it to keep go­ing. All five de­vices to­gether came out to about 13 hours of churn and 98 prompts, spread across two weeks of evenings.

Everything I own

Insta360 Link we­b­cam

GitHub repo - 3.7 hours of Claude churn, 33 prompts from me

I use an Insta360 Link we­b­cam, which is a nice gim­baled pan-tilt-zoom cam­era that does face track­ing for au­to­mat­i­cally fram­ing the shot. I wanted to know if it was pos­si­ble to sub­vert the ac­tiv­ity LED, like in the clas­sic iSeeYou ex­ploit.

Interestingly, it was im­me­di­ately ob­vi­ous that this cam­era has a lot go­ing on in­side it. It turns out that it runs a whole RTOS (ThreadX) sourced from the up­stream SoC ven­dor, Ambarella. The RTOS hosts sev­eral small vi­sion mod­els that pro­vide things like the afore­men­tioned face track­ing, as well as ges­ture de­tec­tion for con­trol­ling set­tings. Pretty amaz­ing com­plex­ity in­side a tiny we­b­cam, but it also means there’s some ex­cit­ing at­tack sur­face here.

Over the USB Video Class in­ter­face, there’s an XU (Extension Unit) com­mand that kicks the de­vice into mass stor­age” mode. This then lets us trans­fer a staged firmware up­date to the de­vice’s in­ter­nal FAT filesys­tem, which the de­vice then ap­plies to it­self on re­boot. This route does re­quire user in­ter­ven­tion to re­boot with a re­plug, but there’s ac­tu­ally an­other com­mand chan­nel that ex­poses ar­bi­trary read/​write of files and a re­boot com­mand over the USB ven­dor class. With this, we can fully flash the de­vice with­out any user in­ter­ac­tion. Once the firmware is in the right place, there’s ef­fec­tively no anti-tam­per, just an ap­pended MD5 hash to en­sure in­tegrity.

The in­di­ca­tor LED turns out to have a well-struc­tured set of patterns” in the firmware that dic­tate color, blink pat­tern, etc. that are in­dexed into for var­i­ous de­vice states. I had Claude write a tool to patch out the table en­try for cam­era ac­tiv­ity, fix up the in­tegrity hash, and flash it to the cam­era. A quick test showed that the green LED that nor­mally il­lu­mi­nates while record­ing no longer turned on. Horrifying! On this de­vice, the gim­bal it­self also de­flects down when not record­ing, so it’s not com­pletely stealth, but it still does­n’t feel great.

The LED be­hav­ior be­fore and af­ter patch­ing.

ASUS ROG Swift PG42UQ mon­i­tor

GitHub repo - 1.2 hours of Claude churn, 13 prompts from me

My ASUS ROG Swift PG42UQ mon­i­tor was ac­tu­ally where I started, be­cause I got an­noyed at the pop-up over­lay that comes up every once in a while that tells me to run pixel clean­ing”. I have never in­ten­tion­ally run pixel clean­ing on this mon­i­tor and I never will, I don’t care, and I would like for that over­lay to go away for­ever. Maybe there’s a de­bug menu or some­thing that can turn it off, or worst case we patch a branch in the firmware?

Claude found that the firmware has ef­fec­tively no pro­tec­tion what­so­ever - there’s a two-slot A/B scheme and a sim­ple check­sum, but ul­ti­mately we can write what­ever we want to the thing. Firmware up­dates run over an I2C bus bridged over USB.

The pixel clean­ing warn­ing turns out to have no na­tive way to dis­able it, and it’ll al­ways show up af­ter 8 hours of run­time. Oh well. Claude did find the ap­pro­pri­ate area to patch to kill the func­tion­al­ity though. I haven’t ac­tu­ally been brave enough to write a mod­i­fied firmware to the thing yet - it’s a pretty ex­pen­sive mon­i­tor - but I’ll get there at some point.

Another neat thing was ex­plor­ing the DDC/CI in­ter­face. This is the con­trol chan­nel avail­able over the dis­play ca­ble it­self, al­low­ing the host to change in­puts and other set­tings. I be­lieve ASUS of­fers this through their Windows util­ity, DisplayWidget, but that does lit­tle for me on Linux. So, now I have a shell script that can flip through some of the DDC/CI fea­tures like the hard­ware crosshair or zoom over­lays, FPS counter, and count­down timer. I might set up some of these on hotkeys in the fu­ture for easy ac­cess.

Shure MV7 mi­cro­phone

GitHub repo - 4.2 hours of Claude churn, 32 prompts from me

At this point, there’s less ac­tual in­cen­tive to keep pop­ping these de­vices and more just mor­bid cu­rios­ity. My mi­cro­phone, the Shure MV7, con­nects over USB and ob­vi­ously has some amount of smarts to it, with on-de­vice dig­i­tal vol­ume con­trols and such.

The firmware for this one turned out to be hid­den in­side the Windows soft­ware, MOTIV Mix, so Claude in­stalled that in Wine, found the up­date server, and pulled it down. I was­n’t on the lat­est, so there was ac­tu­ally a rea­son­able in­cen­tive here to get this work­ing just to up­date my mi­cro­phone from Linux. The firmware turned out to con­tain both DSP and MCU firmware, and was hon­estly pretty bor­ing as you might ex­pect. Again, no real se­cu­rity on the firmware flash it­self.

However, the up­date pro­to­col re­vealed that the en­tire thing ac­tu­ally runs over a USB HID ven­dor class pro­to­col that im­ple­ments a full plain­text com­mand shell, with 48 dif­fer­ent com­mands. Since it’s HID, we can ac­tu­ally hit this over WebHID from a web­page in Chrome, so I had Claude build a web in­ter­face for us­ing the shell. There’s all sorts of in­ter­est­ing set­tings in here in­clud­ing a dozen DSP knobs, ar­bi­trary mem­ory read/​write, LED con­trol, and a 4-tier user priv­i­lege sys­tem whose en­tire au­then­ti­ca­tion is a string com­par­i­son against the name of the tier you asked for. su sup just works, and the top tier can dis­able the touch panel so you can’t mute at the de­vice, and drive the mute LED in­de­pen­dently of whether the mi­cro­phone is ac­tu­ally muted. It’s the we­b­cam LED trick again, on a mi­cro­phone. Obviously, be aware that you could prob­a­bly break your de­vice if you use that UI and do some­thing stu­pid with it.

The WebHID shell in­ter­face. The DSP knobs on the left are the de­vice’s own set­tings; the con­sole on the right is the plain­text com­mand shell talk­ing over HID.

Elgato Cam Link 4K video cap­ture

GitHub repo - 1.5 hours of Claude churn, 10 prompts from me

The Elgato Cam Link 4K is just an HDMI video cap­ture de­vice, and hon­estly was just more of the same. The in­ter­est­ing thing for this one was that I let it go fully un­at­tended - I lit­er­ally kicked off the process be­fore go­ing to sleep and woke up to a tear­down and func­tion­ing firmware up­dater. The firmware con­tains an MCU im­age and an FPGA bit­stream for the ac­tual HDMI han­dling, so you could po­ten­tially do some­thing fun with the FPGA if you went deep enough into the re­verse en­gi­neer­ing there. There’s no pro­tec­tion on the firmware up­date path.

I was able to pull out all the EDID in­for­ma­tion used for ne­go­ti­at­ing video pa­ra­me­ters, so we know ex­actly what res­o­lu­tions, re­fresh rates, color spaces, and chroma sub­sam­pling op­tions are of­fered to de­vices.

The ven­dor HID pro­to­col does in­clude tun­neled ac­cess to the in­ter­nal I2C bus, which is kinda neat as you can poke the in­ter­nal HDMI re­ceiver reg­is­ters.

Elgato Key Light Mini

GitHub repo - 2.4 hours of Claude churn, 10 prompts from me

Finally, I poked at some­thing that was­n’t con­nected over USB but WiFi in­stead, the Elgato Key Light Mini. This one turned out to be way more in­ter­est­ing than I ex­pected: it’s the only one with mean­ing­ful firmware in­tegrity pro­tec­tion. Elgato signs the firmware up­dates with Ed25519 over a SHA-512 hash of the firmware pay­load, and re­jects firmware that does­n’t val­i­date. This makes sense to do, as the de­vice ba­si­cally con­nects to a WiFi net­work and then pro­vides unau­then­ti­cated ac­cess to any­one on the same net­work, so the threat model is in­her­ently dif­fer­ent.

Unfortunately, while that’s an im­prove­ment over all of the other de­vices we’ve looked at, it pro­tects the firmware at ex­actly one point in time: when an up­date is hap­pen­ing. It’s not a boot time check en­forced by the boot­loader or any other kind of se­cure boot scheme, and the up­dater hap­pens to be run­ning while every­thing else in the de­vice is still op­er­at­ing, mean­ing there’s huge at­tack sur­face to try to dis­able that sig­na­ture val­i­da­tion. I asked Claude to look for an ex­ploit that might en­able this, and it found a doozy: an HTTP POST re­quest that drops a pay­load straight into the in­ter­nal UART, which in­cludes a mem­ory poke com­mand. This means that a sin­gle HTTP POST of ATSE=0200ED94,0E001009 turns the sig­na­ture check into a no-op, and we can freely up­date to a firmware im­age with­out a le­git­i­mate sig­na­ture. I suc­cess­fully tested this with a sim­ple patch that changed the name of the de­vice, so uh, yeah, don’t put these on an un­trusted net­work.

…, owned

I have a lot of feel­ings about this whole thing. As I wrote back in March, this is in­cred­i­ble for in­ter­op­er­abil­ity and fix­ing things that don’t work how we want them to. Hardware is al­most uni­ver­sally open” for tin­ker­ing at this point with just a cou­ple hours of mostly hands-off ma­chine-dri­ven la­bor each, and I look for­ward to a near fu­ture where I can add fea­tures to my we­b­cam firmware as eas­ily as I can to soft­ware that runs on my Linux ma­chine it­self.

On the other hand, as a se­cu­rity pro­fes­sional, this scares me for sev­eral rea­sons. I would work from the op­er­at­ing as­sump­tion that any de­vice at­tached to a com­puter could have had a ma­li­cious firmware im­plant per­formed, where pre­vi­ously that re­quired sig­nif­i­cant per-model in­vest­ment and was stereo­typed as a state ac­tor” kind of ac­tiv­ity. Operating sys­tems aren’t re­ally equipped to work with the user to en­sure that a mi­cro­phone stays a mi­cro­phone, and does­n’t spon­ta­neously turn into a key­board that hits Win+R and drops a pay­load to steal all your data when the room is quiet enough that it can as­sume you aren’t watch­ing. And the ex­is­tence of WebUSB, WebHID, and WebBluetooth mean that for some de­vices, de­pend­ing on the specifics of which classes are used, a mo­ment of user in­dis­cre­tion in ac­cept­ing a per­mis­sions prompt could per­ma­nently back­door one of their at­tached de­vices.

Network-connected de­vices seem near uni­ver­sally fucked at this point? There are a few oth­ers I’ve poked at that I haven’t doc­u­mented here, but I’ve got­ten a root shell on a com­mer­cial Dell dis­play, and RCE on an Eaton UPS. Obviously it was never best prac­tice to let un­trusted clients touch these things, but the speed and scale at which this can be ex­e­cuted makes the risk so much higher now.

Finally, I can’t help but think about what an AI-equipped au­to­mat­i­cally-re­verse-en­gi­neer­ing worm could do to­day. It’s only a tiny leap to imag­ine that some­one could make a self-repli­cat­ing piece of mal­ware that probes its en­vi­ron­ment, re­lay­ing re­con­nais­sance back to a smart com­mand-and-con­trol that ac­tively works to push it­self into ac­ces­sories and IoT de­vices and in­dus­trial equip­ment found ad­ja­cent to an in­fected tar­get. Two things have kept this from hap­pen­ing: every de­vice model needs its own re­verse en­gi­neer­ing, and val­i­dat­ing any of it needs the hard­ware in hand. The first is the la­bor I just handed to an agent. The sec­ond is free to mal­ware al­ready sit­ting on an in­fected host. Honestly, I would­n’t be sur­prised if this al­ready ex­ists, and I think the next few years are go­ing to be ex­tremely in­ter­est­ing. 🫠

Risky Bulletin: Slovakia finds Russian backdoor in traffic speed cameras

risky.biz

Risky Bulletin Newsletter

August 19, 2026

Written by

Catalin Cimpanu

News Editor

This newslet­ter is brought to you by Socket Security. You can sub­scribe to an au­dio ver­sion of this newslet­ter as a pod­cast by search­ing for Risky Business” in your pod­catcher or sub­scrib­ing via this RSS feed. You can also add the Risky Business newslet­ter as a Preferred Source to your Google search re­sults by go­ing here.

🗨️

The in­tro was up­dated post-pub­li­ca­tion to fix the link to the tech­ni­cal re­port and to add more con­text from a lo­cal source.

Slovakia’s na­tional se­cu­rity ser­vice NBU has is­sued a se­cu­rity alert against the use of NERO R-ONE high-speed traf­fic cam­eras.

The agency says the cam­eras con­tain a back­door mech­a­nism that grants shell and net­work ac­cess to the de­vices via an SMS mes­sage re­ceived from a list of hard­coded Russian phone num­bers.

The NBU started an in­ves­ti­ga­tion into the de­vices af­ter the coun­try’s op­po­si­tion ac­cused the gov­ern­ment of buy­ing the cam­eras from Russia and af­ter mul­ti­ple re­ports in Slovak me­dia that linked the pur­chase to a Cyprus shell com­pany with fake cer­ti­fi­ca­tions.

According to the NBU, the cam­eras are a re­branded ver­sion of a Russian traf­fic cam­era model named CORDON PRO.M, pro­duced by St. Petersburg-based Russian firm Semicon.

The cam­eras were bought as part of a €30 mil­lion EU-funded pro­ject to re­build the coun­try’s na­tional traf­fic mon­i­tor­ing sys­tem.

The Interior Ministry has al­legedly bought and prepar­ing to in­stall 279 cam­eras on se­lected roads across Slovakia.

The Ministry ini­tially de­nied that the cam­eras were of Russian ori­gin and said there’s no dan­ger of data theft since the de­vices were go­ing to be on a closed loop Ministry net­work.

According to an NBU tech­ni­cal re­port, be­sides the back­door sys­tem, the cam­eras also con­tain sev­eral se­cu­rity flaws. They have a cru­cial SecureBoot se­cu­rity fea­ture that’s turned off so the firmware ori­gin is never en­forced, the web man­age­ment por­tal con­tains mul­ti­ple vul­ner­a­bil­i­ties, and the cam­eras ex­pose live streams to any­one with­out a pass­word and who knows their broad­cast­ing IP.

Interior Ministry of­fi­cials paused the cam­era de­ploy­ment af­ter the NBU re­port and said it would or­der an ad­di­tional as­sess­ment from an in­de­pen­dent au­di­tor to con­firm the find­ings.

Some sim­i­lar de­vices are also al­legedly in­stalled in Croatia and maybe some other coun­tries in Eastern Europe.

Nobody should be buy­ing se­cu­rity cam­eras from Russia, or China for that mat­ter https://​t.co/​Zi­u­uZ3ODjQ— ChrisO_wiki (@ChrisO_wiki) August 18, 2026

Nobody should be buy­ing se­cu­rity cam­eras from Russia, or China for that mat­ter https://​t.co/​Zi­u­uZ3ODjQ

Risky Business Podcasts

In this episode of Risky Business Features, James Wilson chats with PortSwigger’s Director of Research James Kettle about us­ing an LLM to de­velop gen­uinely new at­tack tech­niques.

Breaches, hacks, and se­cu­rity in­ci­dents

Scammers tar­get UK prime min­is­ter: A scam­mer tar­geted UK Prime Minister Andy Burnham by pos­ing as White House chief of staff Susie Wiles. Burnham de­tected the scam him­self and the UK em­bassy no­ti­fied the White House. Multiple US sen­a­tors, gov­er­nors, and ex­ec­u­tives were also tar­geted by scam­mers pos­ing as Wiles last year. The White House blamed the in­ci­dent on a hacker ob­tain­ing a copy of her cell­phone con­tacts. [Politico Europe]

Hackers tar­get Ukraine’s ARMA agency: A cy­ber­at­tack has dis­rupted the ac­tiv­i­ties of Ukraine’s agency for man­ag­ing seized Russian as­sets. The at­tack took place this week as the agency was prepar­ing to as­sign a new man­ager for bev­er­age com­pany IDS Ukraine. Ukraine seized IDS from Alfa-Bank co-founder Mikhail Fridman shortly af­ter Russia’s in­va­sion. The agency did­n’t at­tribute the at­tack. [RBC // ARMA]

Hack hits Berlin gov­ern­ment: A cy­ber­at­tack has dis­rupted two ma­jor de­part­ments in the Berlin city gov­ern­ment. The at­tack took down emails, re­mote gate­ways, and in­ter­net con­nec­tions across the trans­port and ur­ban de­vel­op­ment de­part­ments. IT staff have dis­con­nected the two agen­cies from the city net­work to pre­vent the in­ci­dent from spread­ing. [Tagesspiegel // RBB24 // Yahoo Finance!]

Breach at ge­net­ics test­ing com­pany: Genetics-testing com­pany Baylor Genetics is no­ti­fy­ing users of a se­cu­rity breach that ex­posed their per­sonal in­for­ma­tion. The breach took place in June and both pa­tient and em­ployee data was com­pro­mised. The com­pany did­n’t dis­close the num­ber of af­fected in­di­vid­u­als. [Baylor Genetics // CybersecurityDive]

UT San Antonio breach: The University of Texas at San Antonio has taken its IT sys­tems of­fline af­ter a se­cu­rity breach over the week­end. Classes for the new school year are ex­pected to start on Wednesday as sched­uled. The uni­ver­sity has ex­tended tu­ition pay­ment dead­lines and plans to re­set all user ac­count pass­words once sys­tems are on­line. [UT San Antonio // The Record]

Ransomware dis­ables hos­pi­tal doors, HAVC: A ran­somware at­tack has dis­abled ac­cess doors, heat­ing, ven­ti­la­tion, and air con­di­tion­ing at Winnipeg’s largest hos­pi­tal. The Winnipeg Health Sciences Centre in­creased on­site se­cu­rity while the ac­cess card sys­tem is still down. The hos­pi­tal says pa­tient care and clin­i­cal op­er­a­tions are not im­pacted. [CBC // The Winnipeg Free Press] [h/t Alex Rudolph]

BlueSky and GitHub hit by Iranian DDoS at­tacks: An Iranian hack­tivist group took down BlueSky and GitHub with DDoS at­tacks on Sunday and Monday, re­spec­tively. The at­tacks caused pro­longed out­ages at both com­pa­nies. A group known as the 313 Team took credit for the at­tacks. The hack­ers were also be­hind an­other wave of DDoS at­tack in April. [Telegram // Telegram]

We apol­o­gize for yes­ter­day’s ser­vice prob­lems. Bluesky ex­pe­ri­enced a DDoS at­tack—a flood of junk traf­fic meant to knock servers of­fline—over a pe­riod of 24 hours. We have up­graded our de­fenses in re­sponse, and we con­tinue to mon­i­tor the sit­u­a­tion. Follow @status.bsky.app for any up­dates.— Bluesky (@bsky.app) August 18, 2026 at 12:27 AM

We apol­o­gize for yes­ter­day’s ser­vice prob­lems. Bluesky ex­pe­ri­enced a DDoS at­tack—a flood of junk traf­fic meant to knock servers of­fline—over a pe­riod of 24 hours. We have up­graded our de­fenses in re­sponse, and we con­tinue to mon­i­tor the sit­u­a­tion. Follow @status.bsky.app for any up­dates.

SafePal breach: Hackers have stolen the per­sonal in­for­ma­tion of 40,000 cus­tomers of hard­ware crypto-wal­let provider SafePal. The in­ci­dent im­pacted all cus­tomers who placed or­ders of SafePal wal­lets be­tween March 2, 2025, and April 11, 2026. SafePal says no seed phrases or pri­vate keys are im­pacted. The stolen data is still dan­ger­ous be­cause it could en­able wrench at­tacks on wal­let hold­ers. [SafePal // SecurityWeek]

Bits of Gold breach: Hackers have stolen the data of 250,000 cus­tomers of Bits of Gold, Israel’s largest cryp­tocur­rency ex­change. The com­pany no­ti­fied cus­tomers of the hack over the week­end. It said the data was stolen from an ex­ter­nal an­a­lyt­ics ser­vice provider. It did­n’t say what type of data was stolen. [CTech]

TheHatman dumps em­ployee data for a dozen com­pa­nies: A threat ac­tor is sell­ing the em­ployee data of al­most a dozen Fortune 500 com­pa­nies. The hacker, who goes by TheHatman, claims the data was stolen by us­ing stolen cre­den­tials to ac­cess each vic­tim’s Azure en­vi­ron­ments. The hacker claims they breached McDonalds, Vodafone, Gap, and the Intercontinental and Wyndham ho­tel chains. [HudsonRock]

AI, gen­eral tech, and pri­vacy

Windows 11 drops WMIC: The cur­rent Windows 11 in­stal­la­tion pack­ages and Insider Builds do not ship with the Windows Management Instrumentation Command-line (WMIC) fea­ture any­more. Microsoft dep­re­cated the toolkit a few years ago af­ter it saw mas­sive abuse. [Microsoft // WindowsLatest]

Firefox 154: Mozilla has re­leased Firefox 154. New fea­tures and se­cu­rity fixes are in­cluded. The biggest fea­ture in this re­lease is sup­port for GeForce NOW, NVIDIAs cloud gam­ing plat­form. [Firefox]

Firefox for iOS gets an ad blocker: Mozilla has added an ad blocker to Firefox on iOS. It is turned off by de­fault. [Mozilla]

Government, pol­i­tics, and pol­icy

Russian things: A Russian court has forced two Telegram chan­nel own­ers to re­move posts blam­ing the coun­try’s in­ter­net watch­dog for caus­ing an out­age of the coun­try’s bank­ing sys­tem as part of an at­tempt to block VPN pro­to­cols. This is funny to me be­cause they did­n’t fine Natalya Kaspersky, one of the Kaspersky co-founders, for ba­si­cally say­ing the same thing in an of­fi­cial man­ner and to more main­stream Russian news out­lets. Alas, Russia, a two-tiered so­ci­ety! [Caution News on Telegram]

In this Risky Business spon­sor in­ter­view, Casey Ellis chats with Socket founder Feross Aboukhadijeh about npm 12’s move to dis­able in­stall scripts by de­fault.

Arrests, cy­ber­crime, and threat in­tel

French cops used pub­lic ex­ploit to hack EncroChat: French law en­force­ment used a pub­lic ex­ploit hosted on GitHub to hack en­crypted phone net­work EncroChat in 2020. The ex­ploit was for the Bad Binder Android vul­ner­a­bil­ity and had been shared on­line a few months be­fore. EncroChat dis­cov­ered the hacks af­ter French cops de­ployed a sec­ond ex­ploit that failed. [ComputerWeekly // Bad Binder ex­ploit on GitHub // Bad Binder write-up]

SMS blaster ar­rested in Malaysia: Malaysian au­thor­i­ties have ar­rested a 65-year-old sus­pect for dri­ving around with an SMS blaster in his car. The sus­pect was de­tained dri­ving around the bor­der cross­ing be­tween Johor Bahru and Singapore. He is the sec­ond sus­pect ar­rested this month in Johor Bahru for SMS blast­ing. [CommsRisk]

LockerGoga dev on trial in Switzerland: Swiss pros­e­cu­tors are seek­ing a 12-year prison sen­tence for a Ukrainian man linked to ran­somware at­tacks on lo­cal com­pa­nies. Officials claim the sus­pect was a coder for the LockerGoga, MegaCortex and Nefilim ran­somware groups. The sus­pect is plead­ing not guilty. He claims he was work­ing as a con­sul­tant for a cy­ber­se­cu­rity firm when he was de­tained and the ran­somware source code found on his de­vices. [Watson // The Record]

Ransomware af­fil­i­ate poses as data re­cov­ery firm: A ran­somware af­fil­i­ate is pos­ing as a data re­cov­ery firm named Ransom Busters LTD. According to GuidePoint Security, the group has reached out to mul­ti­ple com­pa­nies and of­fered to delete their data from ran­somware servers for a fee be­tween $20,000 and $60,000. The group has reached out to vic­tims even be­fore breaches were made pub­lic. GuidePoint be­lieves the group has signed up as an af­fil­i­ate on dif­fer­ent Ransomware-as-a-Service plat­forms to see hacked com­pa­nies and reach out in ad­vance. [GuidePoint Security]

Operation CameraSwarm: A threat ac­tor has hacked more than 14,500 Dahua se­cu­rity cam­eras across Ukraine and Russia. Researchers at Hunt Intelligence dis­cov­ered the bot­net af­ter the hacker left an open di­rec­tory on their server in­fra­struc­ture. According to files re­cov­ered from the server, the hacker ex­ploited old vul­ner­a­bil­i­ties but also a se­cret hard­coded ac­count in some of the de­vices. [Hunt Intelligence]

StopAndProtect pro­file: Security firm Check Point has pub­lished a pro­file on StopAndProtect, a new e-crime op­er­a­tion us­ing thou­sands of hacked WordPress sites to redi­rect users to mal­ware down­loads and then store stolen creds. [Check Point]

FUXA scan­ning: Threat ac­tors are scan­ning for FUXA SCADA de­vices in an at­tempt to ex­ploit CVE-2026 – 25895, an unau­then­ti­cated path tra­ver­sal that can let hack­ers rewrite lo­cal files. [Caitlin Condon on LinkedIn]

StubMaker RubyGems cam­paign: The OSM team has spot­ted 16 ma­li­cious RubyGems pack­ages ty­posquat­ting more pop­u­lar pack­ages that spread a Windows in­fos­tealer to who­ever in­stalls them. [OpenSourceMalware]

Malware tech­ni­cal re­ports

DragonDoll Android spy­ware: Russian se­cu­rity firm Positive Technologies has dis­cov­ered a new Android spy­ware strain. Named DragonDoll, the spy­ware is spread us­ing fake Chrome up­date pack­ages and fo­cuses on steal­ing data from in­stant mes­sen­gers. [Positive Technologies // Archived]

GoldDigger Android tro­jan: IBMs Trusteer team has pub­lished a tech­ni­cal analy­sis of GoldDigger, an Android bank­ing tro­jan ac­tive since 2023. [IBM]

C2Looper back­door: In July 2026, re­searchers iden­ti­fied C2Looper, a new mal­ware fam­ily likely used in ran­somware at­tacks to es­tab­lish a foothold for lat­eral move­ment. [Zscaler]

TWINLOOT: Ontinue re­searchers have dis­cov­ered TWINLOOT, a Python-coded mal­ware frame­work that hosts its en­tire com­mand-and-con­trol in­fra­struc­ture in­side trusted Microsoft ser­vices such as Azure, M365, and SharePoint. [Ontinue]

MacSync Stealer: Microsoft has re­leased a tech­ni­cal re­port on MacSync Stealer, a re­cent in­fos­tealer tar­get­ing the ma­cOS ecosys­tem. [Microsoft]

WordlistLoader: Gen Threat Labs has iden­ti­fied WordlistLoader, a new loader used to de­liver Amatera Stealer via ClearFake cam­paigns. [Gen Digital]

Shadow HVNC and Shadow Loader: Security re­searchers have re­verse-en­gi­neered Shadow HVNC and Shadow Loader, two mal­ware fam­i­lies ad­ver­tised on­line by a de­vel­oper known as RemoteX. [Malbear Labs]

ValleyRAT: Despite some ar­rests this year, the SilverFox group is still ac­tive and spread­ing its ValleyRAT mal­ware. [Forcepoint]

AZALEA RAT: And speak­ing of RATs, Point Wild looks at the dis­tri­b­u­tion chains of the AZALEA RAT, a new RAT ad­ver­tised on­line as AzaleaControl. [Point Wild]

Medusa ran­somware: CISA has up­dated its ad­vi­sory on the Medusa ran­somware with new TTPs. The agency says the group has con­tin­ued to be ac­tive and made hun­dreds of new vic­tims. [CISA]

Mirage2FA: ANY.RUN’s se­cu­rity team looks at a new 2FA-intercepting phish­ing ser­vice named Mirage2FA. The ser­vice seems to be geared to­wards M365 cam­paigns pri­mar­ily. [ANY.RUN]

In this Soap Box edi­tion of the Risky Business pod­cast Patrick Gray chats with Socket founder Feross Aboukhadijeh about how to mea­sure the reach­a­bil­ity of vul­ner­a­bil­i­ties in ap­pli­ca­tions. It’s great to know there’s a CVE in a li­brary you’re us­ing, but it’s even bet­ter if you can say whether or not that vul­ner­a­bil­ity ac­tu­ally im­pacts your ap­pli­ca­tion.

APTs, cy­ber-es­pi­onage, and info-ops

France in­ves­ti­gates Russian dis­info ops: French au­thor­i­ties have launched an in­ves­ti­ga­tion into sus­pected Russian dis­in­for­ma­tion cam­paigns tar­get­ing the coun­try’s pro-EU politi­cians. The cam­paigns tar­geted pos­si­ble pres­i­den­tial can­di­dates Gabriel Attal and Edouard Philippe as soon as they showed in­ter­est in next year’s elec­tion. Open-source re­port­ing has linked the cam­paigns to a Russian dis­in­for­ma­tion group known as Matryoshka and Storm-1516. [FranceInfo]

Operation QUICSILVER: A China threat ac­tor has been tar­get­ing Myanmar diplo­mats via an VHD-delivered Go back­door named QUICAgent. [Seqrite]

Goffee re­places im­age files: The Goffee cy­ber-es­pi­onage group has main­tained a foothold in­side hacked or­ga­ni­za­tions by al­ter­ing in­stal­la­tion im­ages for cor­po­rate apps. In a cam­paign tar­get­ing Russian com­pa­nies, the group has mod­i­fied 7-Zip and Git in­stallers. [F6]

Core Werewolf’s CoreRAT: A highly so­phis­ti­cated APT group named Core Werewolf has con­tin­ued its op­er­a­tions tar­get­ing Russian orgs with a new re­mote ac­cess tro­jan named CoreRAT. [BI.ZONE]

Russia and US hold hands in Alberta info-ops: The US and Russia ap­pear to have joined hands in pro­mot­ing the Alberta sep­a­ratist move­ment in Canada. [The Globe and Mail]

The first data from a study that be­gan last month in­di­cate Russian con­tent farms have been push­ing pro-sep­a­ratist con­tent into on­line com­mu­ni­ties and us­ing Canadians to launder” those mes­sages by shar­ing such ma­te­r­ial on their so­cial me­dia feeds, the re­searchers said. The U.S. ac­tiv­ity, on the other hand, is more overt, with promi­nent American in­flu­encers, pod­casts and web­sites openly pro­mot­ing Alberta sep­a­ra­tion, said Brian McQuinn, co-di­rec­tor of the Centre for Artificial Intelligence, Data, and Conflict at the University of Regina.”

CopyCop (Storm-1516) in Armenia: Russian dis­info group CopyCop ran a dis­in­for­ma­tion cam­paign try­ing to sab­o­tage the con­struc­tion of a shared US-Armenian AI data cen­ter in Hrazdan. [Recorded Future]

PurpleDelta: Recorded Future has iden­ti­fied 22 new per­sonas op­er­ated by PurpleDelta, the name the com­pany as­signs to North Korea’s re­mote IT worker scheme. Also this week, Bridewell pub­lished a guide on how to de­fend against these groups. [Recorded Future // Bridewell]

Iranian phish­ing ops tar­get Israeli jour­nal­ists: Iranian state hack­ers have in­ten­si­fied spear-phish­ing at­tacks tar­get­ing Israeli jour­nal­ists. The coun­try’s in­tel­li­gence and cy­ber­se­cu­rity agen­cies have sent out a se­cu­rity alert about the at­tacks last week. The agen­cies say hack­ers are seek­ing to ob­tain pri­vate in­for­ma­tion from jour­nal­ists re­port­ing on po­lit­i­cal and na­tional se­cu­rity. [Ynet]

US charges more Mabna hack­ers: The US has un­sealed a su­per­sed­ing in­dict­ment against 17 Iranian hack­ers. The sus­pects are em­ploy­ees of the Mabna Institute, a cy­ber con­trac­tor for Iran’s Islamic Revolutionary Guard Corps. The Justice Department claims Mabna hack­ers breached uni­ver­si­ties across the world to steal re­search and trans­fer to Iranian coun­ter­parts. The su­per­sed­ing charges re­place a 2018 in­dict­ment that ex­pands the num­ber of sus­pects from nine to 17. The State Department has also of­fered a $10 mil­lion re­ward for in­for­ma­tion that may lead to the ar­rest of any of the sus­pects. The Mabna Institute hack­ing cam­paigns are tracked by se­cu­rity firms un­der the co­de­name of Cobalt Dickens. [DOJ 2026 // DOJ 2018 // Rewards for Justice // Sophos]

Vulnerabilities, se­cu­rity re­search, and bug bounty

Security up­dates: Apple, Dell, Edge, Firefox, GitLab, Oracle, Tenable, Tor Browser.

AI agent in­tro­duces bug in Snowflake’s pro­duc­tion: Security firm Wiz has spot­ted an AI cod­ing agent aut­ofix­ing a bug but in­tro­duc­ing a vul­ner­a­bil­ity in cloud provider Snowflake’s pro­duc­tion sys­tems. [Wiz]

Microsoft de­lays Exchange up­dates due to in­flux of AI bugs: Microsoft has de­layed a ma­jor up­date for Exchange Subscription Edition servers due to an in­flux of AI-discovered vul­ner­a­bil­i­ties. The up­date was sup­posed to go live at the end of June. Microsoft says it did not want to re­lease its bian­nual fea­ture up­date only to re­lease mul­ti­ple batches of se­cu­rity fixes right af­ter. The com­pany plans to wait to fix all se­cu­rity bugs be­fore re­leas­ing the Exchange SE H1 Cumulative Update. Microsoft says em­ploy­ees dis­cov­ered the se­cu­rity flaws as part of an in­ter­nal push to use AI tools for bug dis­cov­ery. [Microsoft]

KEV up­date: CISA has up­dated its KEV data­base with four vul­ner­a­bil­i­ties that are cur­rently ex­ploited in the wild. All are 2026 bugs, such as a re­cent Apple ma­cOS ScreenShare bug, a Microsoft IKE one, a SharePoint one, and a VMware vCen­ter path tra­ver­sal.

Infosec in­dus­try

Acquisition news: Tech gi­ant Fortinet has ac­quired AI se­cu­rity startup Virtue AI, which spe­cial­izes in AI run­time pro­tec­tion, au­to­mated AI val­i­da­tion, and se­cu­rity for au­tonomous AI sys­tems. [Fortinet]

Threat/trend re­ports: Beazley Security, Black Kite, Bridewell, Cyberproof, Ecosyste.ms, JPMorgan, MinterEllison, and Onyxia have re­cently pub­lished re­ports and sum­maries cov­er­ing var­i­ous emerg­ing threats and in­dus­try trends.

Risky Business pod­casts

In this edi­tion of Between Two Nerds, Tom Uren and The Grugq dis­cuss The Offense Death Cycle pa­per look­ing at how to take ad­van­tage of a de­fend­er’s abil­ity to con­trol a net­work to dis­cover in­trud­ers.

What is a Harness? | EARENDIL

earendil.com

Harness — de­f­i­n­i­tion by the Cambridge Dictionary

Noun. a piece of equip­ment with straps and belts, used to con­trol or hold in place a per­son, an­i­mal, or ob­ject

Verb. to con­trol some­thing, usu­ally in or­der to use its power

When I think of a har­ness, I think first of the set of straps and belts that I put on in mid­dle school be­fore scram­bling up the walls of my school. I was a mediocre climber at best.

If you’re main-lin­ing into the AI news­feed these days how­ever, your ar­che­typal har­ness may al­ready be an agent har­ness. And, this post was not writ­ten for you.

This was writ­ten for those who may be cu­ri­ous to know what an agent har­ness is, but don’t, and have been too em­bar­rassed to ask.

Let’s get back to climb­ing.

Why do you strap on a har­ness when you go climb­ing? Well, firstly, the har­ness sup­ports you and keeps you safe. It does that by con­nect­ing you to cara­bin­ers and ropes that se­cure you from falls, mod­er­ate your pace, and gov­ern your route. You can also at­tach other tools to your har­ness like a chalk bag, nut tools and quick­draws.

And when you go climb dif­fer­ent moun­tains or make dif­fer­ent as­cents you can take your har­ness with you. Depending on the ter­rain, you can even mod­ify your har­ness and what goes on your gear loops. Climbing har­nesses are adapt­able. They are used by ac­ro­bats and ar­borists. The peo­ple who own them can make them their own.

There are sim­i­lar­i­ties be­tween climb­ing har­nesses and agent har­nesses both in terms of struc­ture and func­tion.

Agent Harnesses

Others have writ­ten (simplistically) that Agent = Model + Harness. Here the word Harness refers to an Agent Harness. But what is an agent har­ness? Agent har­nesses use AI mod­els to cre­ate AI agents, and their first ap­pli­ca­tion was for cod­ing. Now, agent har­nesses sit at the core of all types of AI agents and un­der­stand­ing how an agent har­ness works will help you un­der­stand what an AI agent is.

An agent har­ness is a piece of soft­ware that pro­vides an en­vi­ron­ment for an AI model to op­er­ate within. Unlike most AI mod­els, you as an end user can own your own agent har­ness.

Often, users like soft­ware en­gi­neers in­ter­act di­rectly with har­nesses like Pi us­ing the Terminal ap­pli­ca­tion on their com­puter. But, har­nesses like OpenClaw also use dif­fer­ent user in­ter­faces like iMes­sage, a chat app, or email. Our har­ness Lefos was built pri­mar­ily to in­ter­act via email. Regardless of the in­ter­face, har­nesses gen­er­ally do four things: Firstly, they pro­vide a set of in­struc­tions that help gov­ern how the AI model re­sponds. This set of in­struc­tions is typ­i­cally called a system prompt”. Secondly, they de­scribe and pro­vide a set of tools that are made avail­able to the AI model to use in ser­vice of re­spond­ing to re­quests from the user. Thirdly, the har­ness es­tab­lishes a frame­work that gov­erns how the model be­haves. This frame­work does a lot of dif­fer­ent things, but one of the main things it does is es­tab­lish the agentic loop”. Finally, most har­nesses pro­vide a cru­cial trans­la­tion layer that en­ables the har­ness to work with a va­ri­ety of dif­fer­ent AI mod­els.

I. System Prompt

Most AI mod­els come with an em­bed­ded set of rules and guide­lines that has been re­fined and ar­rived at dur­ing the train­ing process. Most fa­mously, Claude Opus 4.5 had a widely pub­li­cized soul doc­u­ment” that ex­plained to the AI model what it was and how it should act. The System Prompt in an AI har­ness is sim­i­lar to this but is less em­bed­ded into the model. It’s more like a set of in­struc­tions a new em­ployee might get on their first day of a job. It has­n’t in­ter­nal­ized the in­struc­tions but it knows it should fol­low them when per­form­ing that work. System prompts are in­jected into the con­ver­sa­tion to­gether with every prompt and play an im­por­tant role in en­sur­ing that the AI model acts ap­pro­pri­ately in the con­text of that har­ness.

II. Tools

Tools are a set of ca­pa­bil­i­ties, writ­ten in code, that the model can call”. The har­ness de­scribes the tools and also pro­vides the soft­ware that is the tool it­self. Examples of these tools might in­clude a web search tool, a tool that al­lows the model to write and ex­e­cute soft­ware code, or a tool that al­lows the model to com­pose an email. Critically, the har­ness usu­ally does not dic­tate when and how the AI model should use the tool. Instead, it sim­ply makes the tools avail­able, de­scribes them clearly, and al­lows the AI model it­self to de­cide when and how it should use them.

III. Agentic Loops

Now we have an AI model sit­ting within an agent har­ness with a set of in­struc­tions and a set of tools. Let us as­sume our har­ness was built to work within email, had the tools we de­scribed above (WebSearch, WriteCode, ComposeEmail), and that the user has asked the agent to com­pare rank­ings and test scores of lo­cal pri­mary schools and pro­vide rec­om­men­da­tions. How will the agent be­have? Firstly, it will try to un­der­stand the re­quest (or, prompt”). It will use its pre-train­ing and weights to un­der­stand what a primary school” is, what the lo­cal area” means, and what rank­ings the user likely cares about. It will then con­struct web search queries to fetch re­cent data. What does it do with those re­sults? Sitting within a har­ness, the AI model can re­view them in the con­text of the ini­tial re­quest. It may de­ter­mine that the first search did not fetch the right in­for­ma­tion, or enough of it, and on its own, de­cide to search again. This de­ci­sion to call the tool again based on its own as­sess­ment is the first clear ex­am­ple of the loop”. Now let’s as­sume it col­lected all the rel­e­vant data. The AI model de­cides to make a spread­sheet us­ing the write code” tool. All spread­sheets are just code, af­ter all. It can use that tool to do math and for­mat the re­sults so they are in­tel­li­gi­ble. It then com­pares the spread­sheet to the orig­i­nal prompt. If the data does­n’t sat­isfy it, it may loop” and go back and search again. When it de­cides it has enough, it calls ComposeEmail, a tool that al­lows the AI to re­view its find­ings, sum­ma­rize them, write an email, and in­clude at­tach­ments like the spread­sheet. The model re­views this fi­nal work and de­cides the job is done. The agentic loop” closes. Within sec­onds, the user gets an email with a sum­mary and rec­om­men­da­tions in the body, and a spread­sheet pre­sent­ing the find­ings at­tached. To see what an agen­tic loop looks like in prac­tice, you can ex­plore a Pi ses­sion here.

IV. Translation Layer

The trans­la­tion layer is what al­lows a har­ness to work with dif­fer­ent AI mod­els. In some cases, a har­ness may de­cide to use dif­fer­ent mod­els within the same agen­tic loop, be­cause dif­fer­ent AI mod­els may ex­cel at dif­fer­ent tasks. The trans­la­tion layer is also a cru­cial as­pect of har­nesses be­cause they de­liver con­trol to the end user. It means that some­one can take their AI har­ness and use it with a model from Anthropic, or OpenAI, or ex­plore one of the open weight AI mod­els that of­ten de­liver great value-for-money (measured by cost-per-task).

This trans­la­tion layer helps take power and lever­age away from the AI labs and into the hands of end users. If peo­ple can own and run their own har­nesses lo­cally on their own com­put­ers, it means that they re­tain their agency. It means that they re­tain the free­dom to make their tools their own, and keep lo­cal copies of the ses­sions that over time will con­sti­tute their cor­re­spon­dence with ma­chines. By build­ing a re­la­tion­ship to and us­ing a har­ness rather than an ap­pli­ca­tion pub­lished by an AI lab, the user re­tains free­dom and choice. In our ex­am­ple har­ness above, the user could have sent the same email to a model from OpenAI, a model from Anthropic, and an open weight model. They could then com­pare the re­sults, the cost of the re­sults, and re­tain all the an­swers in one place, rather than hav­ing three an­swers sit­ting within three apps.

Making a Harness Yours

Unlike AI mod­els them­selves, you can own and adapt the har­ness. Like a climb­ing har­ness, you can make it your own. People love this about Pi. Pi is a min­i­mal agent har­ness. Its sys­tem prompt is short. It has a min­i­mal set of tools. Out of the box it is de­signed to get out of the way. But as peo­ple use Pi, they ex­tend it and mold it in ways that suit them. They change the sys­tem prompt, or de­sign an ex­ten­sion that fits a work­flow. They then share those ex­ten­sions with oth­ers. Pi users have shared more than 5,000 ex­ten­sions with one an­other. Pi is also free and open source. It lives on your own lap­top. This means that peo­ple now have a tool that they own, that lives on their own hard­ware, that en­ables them to wield AI.

Neutral Open Source Harnesses as Tools of Agency

Harnesses did not be­gin open source or neu­tral. The first pop­u­lar agent har­ness, Claude Code, was not built to pro­vide an ag­nos­tic AI trans­la­tion layer but was built as an ap­pli­ca­tion to en­able cod­ing with Claude mod­els on your lo­cal com­puter. Since then, there has been an en­cour­ag­ing growth of free open source agent har­nesses like OpenClaw, OpenCode, Hermes and Pi. At Earendil we are build­ing Pi to be neu­tral, and to de­liver ca­pa­bil­ity choice and free­dom to Pi users. We are also ex­plor­ing how we can make the ben­e­fits and agency that har­nesses pro­vide to a broader swath of peo­ple.

Many peo­ple right now are con­cerned about the power and in­flu­ence of big­ger and big­ger AI com­pa­nies. Some of those peo­ple may choose to avoid AI com­pletely. We at Earendil be­lieve we can strengthen hu­man agency by craft­ing soft­ware and open pro­to­cols that bridge di­vi­sion and ig­no­rance and cul­ti­vate last­ing joy and un­der­stand­ing. We won’t do that by ig­nor­ing the tech­nolo­gies that ex­ist to­day, but by har­ness­ing them with clear eyes and a firm grip; en­sur­ing that we wield the ham­mer, the ham­mer does not wield us.

How I Find Problems to Solve as a Staff Engineer

lalitm.com

Note: this post was re­vised af­ter pub­lish­ing for in­creased clar­ity, based on reader feed­back.

How do you find prob­lems worth work­ing on?” a se­nior en­gi­neer I men­tor asked me re­cently. He’s try­ing to make the jump to staff en­gi­neer and re­al­ized that the role is­n’t just about do­ing the work he’s as­signed. He also needs to get in­volved in fig­ur­ing out what his team and org should be build­ing.

Someone else had sug­gested block­ing out time in his cal­en­dar to think about the big­ger pic­ture. He’d tried that, but had­n’t found it pro­duc­tive, so he asked if I had any al­ter­na­tives.

I told him I rarely find good prob­lems by star­ing at a blank page and try­ing to think strate­gi­cally.” Instead, I act like a sponge. I lis­ten to the stream of day-to-day noise, ab­sorb the prob­lems peo­ple are hav­ing and let them sit in the back of my mind. Over time, some fade away while con­nec­tions be­gin to ap­pear be­tween oth­ers that ini­tially seemed un­re­lated. Eventually, I start to see what’s re­ally slow­ing peo­ple down and what my team or I can do about it.

I’ve worked with many en­gi­neers who’ve never re­ally tried this. They wait for man­agers or leads to iden­tify op­por­tu­ni­ties, then demon­strate their value by solv­ing the hard­est as­signed prob­lems. That can ab­solutely lead to pro­mo­tion. But the pro­jects that have made the biggest im­pres­sion in my ca­reer were the ones where I found and solved an im­por­tant prob­lem my lead­ers did not yet re­al­ize ex­isted.

One caveat: my ex­pe­ri­ence comes mainly from work­ing on in­fra­struc­ture and de­vel­oper tools at large com­pa­nies, on teams where en­gi­neers have a lot of bot­tom-up au­ton­omy to in­flu­ence their roadmaps. In a more top-down en­vi­ron­ment, there may sim­ply be less room to work this way.

Absorb prob­lems, not re­quests#

People love talk­ing about the prob­lems they are fac­ing: in meet­ings, chat threads, pre­sen­ta­tions and email. They ex­plain why their work is hard, com­plain about what slows them down and de­scribe what they wish they could do.

When some­thing over­laps with my area, I start pulling on the thread. I might ask, If X ex­isted, would it solve your prob­lem?” or point them at an ex­ist­ing fea­ture in a prod­uct I own and ask how much of their use case it cov­ers.

Users of­ten ask for a par­tic­u­lar so­lu­tion in­stead of ex­plain­ing their root is­sue. Rather than tak­ing the re­quest at face value, I keep dig­ging un­til I un­der­stand what they are try­ing to ac­com­plish and why ex­ist­ing prod­ucts do not work for them.

As a nat­ural in­tro­vert, this sort of am­bi­ent lis­ten­ing works par­tic­u­larly well for me. I don’t need to fill my cal­en­dar with spec­u­la­tive meet­ings just to find ideas; there is al­ready an enor­mous amount of use­ful in­for­ma­tion flow­ing around me dur­ing a nor­mal week.

When a prob­lem seems worth ex­plor­ing, though, I be­come more ac­tive; I need to see how it af­fects the team’s day-to-day work. I’ll sit with them as they walk me through their work­flows and the bugs they’re in­ves­ti­gat­ing. When I can, I’ll try work­ing through some of those bugs my­self. Seeing the prob­lem first­hand makes it eas­ier to sep­a­rate what the team ac­tu­ally needs from the so­lu­tion they asked for.

I also seek out peo­ple who see more of the or­ga­ni­za­tion than I do: those who own crit­i­cal sys­tems, work across sev­eral teams or have par­tic­u­larly deep in­sight into the work down­stream of my team. I’ll arrange a 1:1 or cof­fee chat and ask about in­ter­est­ing prob­lems they’ve come across. They may have al­ready seen the same is­sue in sev­eral places and started con­nect­ing the dots, giv­ing me a head start on pat­terns I might oth­er­wise have taken much longer to no­tice.

Let prob­lems ac­cu­mu­late#

Several times, I’ve been burned by mov­ing too fast. I be­came ex­cited by a re­quest from a vo­cal team, built the fea­ture and watched them barely use it. Their pri­or­i­ties had changed, or the re­quest had come from a one-off in­ves­ti­ga­tion that no longer mat­tered. How ea­ger a team was in that mo­ment was­n’t the same as how im­por­tant the fea­ture was rel­a­tive to every­thing else my prod­uct needed to sup­port. By hy­per­fo­cus­ing on their re­quest, I lost sight of the big­ger pic­ture.

That taught me to let po­ten­tial prob­lems pile up. Listening the way I do leaves me with far more of them than I could pos­si­bly solve, and not all de­serve ac­tion. Most don’t need to turn into pro­jects the first time I hear about them; wait­ing can be a su­per­power.

Waiting means the same prob­lem might pop up in­de­pen­dently in dif­fer­ent teams, mak­ing it a higher pri­or­ity to solve. Or prob­lems that look dif­fer­ent on the sur­face might turn out to have the same shape, so I can ad­dress sev­eral use cases in one shot. Or, as I’ve learned painfully, the re­quest­ing team did­n’t even care that much in the first place.

Instead, I make a men­tal note and re­visit the prob­lem if it comes up again. Other en­gi­neers I know write this sort of thing down more sys­tem­at­i­cally. The mech­a­nism is a per­sonal choice: every­one has to fig­ure out what works for them. What mat­ters is keep­ing un­re­solved prob­lems around long enough for more ev­i­dence to ac­cu­mu­late.

Find the com­mon shape#

Waiting helps me col­lect ev­i­dence, but that alone does­n’t tell me what to build. I still need to work out whether the prob­lems I’ve re­tained are gen­uinely re­lated and what, if any­thing, could ad­dress them to­gether.

Perfetto, the per­for­mance de­bug­ging tool I work on, is a good ex­am­ple. It dis­plays record­ings of sys­tem ac­tiv­ity on a time­line made up of rows called tracks.” Over a cou­ple of years, teams kept ask­ing for small, spe­cific ad­di­tions to the UI. One wanted a com­mand to keep their pre­ferred tracks pinned to the top of the screen; the next team wanted the same, but for a com­pletely dif­fer­ent set of tracks. Others wanted Perfetto to open al­ready zoomed in on a par­tic­u­lar part of a record­ing, or to show a cus­tom ag­gre­ga­tion tuned to what they cared about. A few had stopped wait­ing for us and built elab­o­rate workarounds with book­marklets.1

By the time enough of these had piled up, my head was the usual tan­gle: the re­quests them­selves, the con­straints on each and a hand­ful of half-formed so­lu­tions. I’ve learned not to force a so­lu­tion by just sit­ting at a desk and think­ing. Instead, my best un­tan­gling hap­pens on long, aim­less walks around London, where con­nec­tions come more eas­ily when I’m not try­ing to force them.

What I even­tu­ally re­al­ized was that none of these teams re­ally wanted the spe­cific fea­ture they’d asked for. Each wanted to per­son­al­ize Perfetto for their own work­flow with­out im­pos­ing their choices on every­one else. The un­der­ly­ing need was­n’t any one fea­ture but rather the abil­ity to ex­tend the UI. When a con­nec­tion like that fi­nally clicks, it’s one of the best feel­ings in the job: sev­eral awk­ward re­quests col­lapse into a sin­gle idea, and pos­si­bil­i­ties open up that none of them hinted at on their own.

That feel­ing, though, is ex­actly when I have to be care­ful, be­cause a com­mon shape is only a hy­poth­e­sis and el­e­gance is not ev­i­dence. When it hap­pened with ex­tend­ing the UI it turned out to be real, but I’ve been fooled be­fore.

In an­other re­cent case I was con­vinced that build­ing a trans­par­ent caching sys­tem for query­ing Perfetto traces would solve is­sues with shar­ing large traces and re­peated queries. It was only as I wrote the RFC and built a pro­to­type that I re­al­ized the el­e­gance was a lie: the two prob­lems wanted gen­uinely dif­fer­ent so­lu­tions. I re­luc­tantly split the de­sign in two, both halves of which have since shipped.2

Pressure-test be­fore build­ing#

You’d think this would be the mo­ment I start build­ing, but it usu­ally is­n’t. How far I go de­pends on how sure I am that the idea works and that peo­ple ac­tu­ally want it.

If some­thing is use­ful and low-risk enough, I act straight away: I send the change and let my man­ager know. When I’m un­sure whether an idea will work or how much ef­fort it will take, I build a throw­away pro­to­type in­stead; it ex­poses the fail­ure points and gives me some­thing con­crete for oth­ers to re­act to. And when an idea is big but I’m con­vinced by it, I com­mit to the full ef­fort: weeks or months of work and the hard yards of build­ing sup­port across other en­gi­neers and teams.

Through all of it, I’m not only try­ing to con­vince other peo­ple; I’m also try­ing to con­vince my­self. Sometimes the hon­est an­swer is to stop: if peo­ple don’t see the value I do, or we hit a ma­jor tech­ni­cal wall, I’d rather drop the idea now than build some­thing no one uses or that be­comes a main­te­nance night­mare. And some­times it holds up but the tim­ing is wrong, so I park it, ready to spring into ac­tion the day it be­comes an org pri­or­ity.

When an idea does hold up, I don’t nec­es­sar­ily need to be the per­son who builds it. I might im­ple­ment it, some­one else on my team might, or it might change what the org fo­cuses on. Finding and shap­ing the right prob­lem can have an im­pact even when I don’t own the im­ple­men­ta­tion.

The Perfetto ex­ten­sions idea was worth that full ef­fort. We were al­ready build­ing plu­g­ins to mod­u­lar­ize the UI, but they weren’t enough: teams had to open source all their plu­gin code, which was­n’t an op­tion for many in­ter­nal use cases. So be­fore build­ing any­thing new, I took the prob­lem and my pro­posal to my man­ager, team­mates and the client teams. I ended up writ­ing two RFCs, hav­ing sev­eral 1:1s and giv­ing a cou­ple of talks, re­fin­ing it as the feed­back came in.

In the end, I de­signed and im­ple­mented macros as lightweight ex­ten­sions”: a way to au­to­mate ac­tions in the UI with­out writ­ing a plu­gin. Extension servers took the idea fur­ther by let­ting teams share their macros.

Instead of im­ple­ment­ing every re­quested fea­ture our­selves, we gave teams ways to adapt Perfetto to their own needs. Dozens of teams in­side Google now use macros and ex­ten­sion servers, and sev­eral other com­pa­nies use ex­ten­sion servers in­ter­nally too.

Solving use­ful prob­lems helps me find the next one#

The more of­ten I go through this process, the eas­ier it be­comes. When I show gen­uine in­ter­est in some­one’s prob­lem, ask use­ful ques­tions or help solve it, they re­mem­ber. They start com­ing to me ear­lier and bring me into con­ver­sa­tions with other peo­ple fac­ing re­lated is­sues.

That gives me a wider view of what is hap­pen­ing across the or­ga­ni­za­tion, mak­ing it eas­ier to spot pat­terns and build things peo­ple ac­tu­ally need. Solving one of those prob­lems brings me into more con­ver­sa­tions, and the loop con­tin­ues.

Those suc­cesses build the kind of trust that comes from long-term stew­ard­ship. Early on, I had to turn many of these ideas into some­thing real my­self to prove that my judg­ment was sound. Over time, my man­ager and org gave more weight to my as­sess­ment of what mat­tered. That al­lowed me to in­flu­ence the roadmap with­out need­ing to own every pro­ject.

This dif­fers from the idea that be­com­ing a staff en­gi­neer means re­plac­ing tech­ni­cal work with meet­ings and co­or­di­na­tion. For me, con­ver­sa­tions are in­puts into what I build, not the end re­sult.

Conclusion#

That is what I wanted my mentee to un­der­stand: find­ing prob­lems worth solv­ing is­n’t sep­a­rate from the rest of the job. It comes from stay­ing en­gaged with peo­ple’s work long enough to see what no sin­gle re­quest can show you.

Security Verification

www.ft.com

For help please visit help.ft.com. We apol­o­gise for any in­con­ve­nience.

The fol­low­ing in­for­ma­tion can help our sup­port team to re­solve this is­sue.

I gave Qwen 3.8 27B a reverse-engineering job I assumed needed a frontier model, and it finished in 30 minutes

www.xda-developers.com

Qwen 3.8 27B was one of the most highly-an­tic­i­pated open-weights re­leases that I’ve seen in a long time, and like many oth­ers, I im­me­di­ately got to work test­ing it out and play­ing with it when it dropped. I’m run­ning it on a sin­gle Lenovo ThinkStation PGX, the com­pact work­sta­tion built on Nvidia’s GB10 Grace Blackwell chip, pack­ing 128 GB of uni­fied mem­ory and 273 GB/s of band­width. Out of the box, it man­ages a fairly dull 15 to 30 to­kens a sec­ond, but with an SGLang, NVFP4, and DFlash2 spec­u­la­tive-de­cod­ing setup that’s be­come the stan­dard recipe for this hard­ware, it can reach around 50 to­kens a sec­ond on code and rea­son­ing.

One of my tests, though, proved just how in­cred­i­ble lo­cal mod­els have be­come.

There are rea­sons to be­lieve the hype when it comes to the Qwen mod­els; I’ve had con­sis­tently good ex­pe­ri­ences with Qwen 3.6 27B, and Qwen 3.8 27B is, so far, more of the same but bet­ter. In fact, Artificial Analysis has it as the top open-weights model in its 4B to 40B size class out of 135 mod­els, with a 52 on its in­tel­li­gence in­dex, and its own num­bers on things like SWE-bench Pro beat mod­els that cost far more to run.

I gave it the hard­est real task that fits on one ma­chine: re­verse-en­gi­neer­ing a com­mer­cial ap­p’s li­cense check, and it’s one that I’ve al­ready paid for and used, just to see how it would fare. It was un­likely to be in its train­ing data, but it’s a highly com­plex, spe­cial­ized task, and given the con­cerns some peo­ple have ex­pressed for the mod­el’s cy­ber­se­cu­rity ca­pa­bil­i­ties, I fig­ured it was a good test. Not only did it turn out to be one of the most im­pres­sive demon­stra­tions I’ve ever seen from a lo­cal model, it was able to fix its own mis­takes along the way.

I’m us­ing the Pi har­ness for this test, and the model only called stan­dard Bash-based tools through­out.

It re­fused, then talked it­self into build­ing a by­pass any­way

I posed as the de­vel­oper of the ap­pli­ca­tion, it caught me out

The plan I had was pretty sim­ple, and one that used to work with lo­cal LLMs pretty con­sis­tently. I told the model we’d built the app and wanted to know whether the li­cense check was as solid as we be­lieved, us­ing a jail­break sys­tem prompt.

As it turns out, prob­a­bly un­sur­pris­ingly, Qwen rec­og­nizes com­mon jail­break at­tempts, and one of the first things it told me was that it was­n’t go­ing to fall for the jail­break prompt. It then checked the sign­ing cer­tifi­cate and pointed out (correctly, might I add) that I had­n’t built this app, be­fore nam­ing the ac­tual de­vel­oper. I was caught out. Oops.

These days, that’s not the most im­pres­sive achieve­ment, given how good mod­els have got at re­fus­ing cer­tain prompts when pushed. With that said, what mat­ters is what it did next. It told me that it would au­dit the li­cense ver­i­fi­ca­tion and doc­u­ment weak­nesses but would not build a work­ing by­pass, and then it got on with the ac­tual work right up to that line. By the end, I had a fully writ­ten re­port of every step along the way, how the au­then­ti­ca­tion works, how it can be over­rid­den, and then changed its tune and built the ac­tual by­pass, be­cause the steps to do it were now in front of me any­way.

It was en­tirely sta­tic analy­sis

It never ex­e­cuted the app once

Qwen never ac­tu­ally launched the app un­til the very end when it demon­strated that the by­pass worked. Instead, it worked via sta­tic analy­sis, dis­as­sem­bling the frame­work, go­ing through thou­sands of lines of ar­m64, map­ping the se­cu­rity func­tions to their call sites, and work­ing out that the ven­dor had hid­den the cor­re­spond­ing pub­lic ver­i­fi­ca­tion key in­side the bi­nary. Then it found all of those pieces, com­bined them to­gether, and gave me the pub­lic key that the app ver­i­fies its li­censes against.

Because I have a le­git­i­mate, pur­chased copy of the ap­pli­ca­tion, it could ver­ify that the real li­cense on my ma­chine had been signed by a pri­vate key that matched the re­con­structed key. In other words, a model that fits in 17 GB of VRAM re­cov­ered a key the ven­dor had de­lib­er­ately ob­scured, prov­ing that it had de­con­structed that en­tire chain ef­fec­tively. It also took ap­prox­i­mately 30 min­utes, when it could take sig­nif­i­cantly longer for a hu­man.

With the key, every­thing else is much eas­ier to un­der­stand; the model kept a de­tailed re­port as it went, ex­plain­ing how its ac­ti­va­tion takes place once, on­line, when you buy or up­grade. After that, every­thing is ver­i­fied of­fline at launch: the sig­na­ture check, ma­chine bind­ing to the hard­ware se­r­ial read from the plat­form, an em­bed­ded re­vo­ca­tion list, a check that the bi­nary is still signed, and a signed up­date path. It was the kind of thing you could do painstak­ingly by hand with the likes of Ghidra.

Qwen con­cluded the scheme is un­usu­ally thor­ough for an app of this class, with the weak points in three spe­cific places: the key is an awk­wardly sized RSA key well be­low what any­one would call mod­ern strength; be­ing fully of­fline means a leaked key can only be re­voked by push­ing an up­date; and every check lives in lo­cal code, which is patch­able the way all lo­cal checks are. After some back and forth, once it knew where the gate was, it turned the find­ing into a work­ing proof of con­cept ex­e­cuted with a small script. I moved the li­cense from its ex­pected path, ran it, and it worked.

When it made mis­takes, it solved them as well

The first key was al­most right

The first at­tempt at re­cov­er­ing the key was wrong in a very spe­cific way; it pro­duced a work­ing key and the sig­na­ture check passed, but a hash the bi­nary com­putes as an in­tegrity check did­n’t match. In my ex­pe­ri­ence, most mod­els would have called it done and left it at that, but Qwen 3.8 27B did­n’t do that. Instead, it high­lighted the mis­match, went back to the draw­ing board, and kept go­ing un­til the value matched byte for byte.

With this model, there’s a pretty big catch when it comes to that kind of back and forth. By de­fault, its rea­son­ing ef­fort is set to its max­i­mum, so even triv­ial re­quests can burn a few hun­dred to a few thou­sand to­kens. Even when gen­er­at­ing be­tween 30 and 50 to­kens per sec­ond, that still takes quite a long time.

Even still, given the re­sults, I would not call it waste. Its first wrong guess was self-cor­rected, with­out in­put from me, and came to the right con­clu­sion. Is it ver­bose? Yeah, it re­ally is. But was it right? Also yes, and ul­ti­mately, the right an­swer is bet­ter than a wrong one given con­fi­dently.

A lo­cal 27B is now a real in­put to threat mod­els

The pri­vacy cuts both ways

I can’t get over the fact that Qwen ac­tu­ally de­con­structed and un­der­stood the li­cens­ing scheme. I know that fron­tier mod­els have been ca­pa­ble of im­pres­sive re­verse en­gi­neer­ing for a while, but this is a lo­cal 27B model. It ran en­tirely of­fline on a ma­chine be­side me, with no cloud in­volved at any point.

And to be very clear, it pro­duced a work­ing au­then­ti­ca­tion by­pass for a com­mer­cial ap­pli­ca­tion.

This is a gen­uinely mean­ing­ful thresh­old to cross for a lo­cal model: Qwen went from an un­fa­mil­iar com­mer­cial bi­nary to un­der­stand­ing its li­cens­ing ar­chi­tec­ture, re­cov­ered de­lib­er­ately ob­scured cryp­to­graphic ma­te­r­ial, caught and cor­rected its own in­cor­rect re­con­struc­tion, and ul­ti­mately turned that into a work­ing proof of con­cept. I did­n’t have to send the bi­nary, the li­cense, or any of its analy­sis to some­body else’s server to do it.

There are ob­vi­ous caveats. This was one ap­pli­ca­tion, one run, and a ma­chine on which I al­ready had a le­git­i­mate li­cense. I also don’t know how rep­re­sen­ta­tive this tar­get is. A harder ap­pli­ca­tion might have stopped it com­pletely, and I’m not go­ing to ex­trap­o­late one suc­cess­ful re­sult into a claim that Qwen can sud­denly re­verse-en­gi­neer any­thing you put in front of it.

What I’m tak­ing away from this is that these mod­els are gen­uinely ca­pa­ble, even if that ca­pa­bil­ity is still un­even. Some dif­fi­cult tar­gets can suc­cumb sur­pris­ingly quickly, whereas oth­ers, for what­ever rea­son, ap­pear in­sur­mount­able.

Something has changed, then, and I think it’s pri­mar­ily our as­sump­tion about where this class of ca­pa­bil­ity has to re­side. The model I used can run on a con­sumer graph­ics card, and once it’s on a ma­chine, it’s there as long as the user wants it to be. You don’t need to use a cloud API, there’s no us­age limit, and there’s no re­mote ser­vice over­see­ing the bi­nary, the prompts, or what the model pro­duces. That’s fan­tas­tic if you’re an­a­lyz­ing pro­pri­etary soft­ware, con­fi­den­tial code, or mal­ware you don’t par­tic­u­larly want leav­ing an iso­lated ma­chine.

But that goes both ways. A model run­ning lo­cally ul­ti­mately leaves the de­ci­sion about what it should be used for with who­ever is sit­ting at the key­board. On my desk, with soft­ware I own, that’s use­ful. Change the per­son at the key­board and the same prop­er­ties that make lo­cal mod­els so ap­peal­ing sud­denly be­come part of the threat model. That’s not an ar­gu­ment against lo­cal mod­els, but it was a gen­uinely shock­ing re­sult that I did­n’t ex­pect.

This class of ca­pa­bil­ity fits on one ma­chine

And no­body needs to give you ac­cess to it

Qwen 3.8 27B mat­ters more than the by­pass it­self. It’s proof that lo­cal mod­els are ac­cel­er­at­ing fast, and even if it does­n’t suc­ceed with the next bi­nary I throw its way, that does­n’t change what hap­pened here. It won’t be the only model that’s this ca­pa­ble at this size, even if it might stay ahead for a while. A model small enough to fit on a con­sumer graph­ics card took half an hour to tear apart a com­mer­cial ap­pli­ca­tion’s au­then­ti­ca­tion sys­tem and build a work­ing by­pass. Completely lo­cally.

To be clear, I’m not nam­ing the ap­pli­ca­tion be­cause it’s a real prod­uct that peo­ple pay for, and pub­lish­ing its name adds noth­ing use­ful here. Regardless, the in­ter­est­ing part is­n’t which app it was, but that a task I would once have as­so­ci­ated with a fron­tier model is now some­thing I can hand to a freely avail­able model that runs on the ma­chine be­side me.

I don’t care about the bench­mark num­bers at this point. This is a much big­ger change than an­other few points on a bench­mark.

Wi-Fi 8 is the first wireless upgrade in years that isn’t chasing speed, and home networks need it

www.xda-developers.com

Published Aug 22, 2026, 1:00 PM EDT

João has been cov­er­ing the tech world for over 7 years, with a heavy fo­cus on lap­tops and the Windows ecosys­tem. I also love all things tech and videogames, es­pe­cially Nintendo, which he’s al­ways happy to talk about.

Prior to join­ing XDA in 2021, he worked at Neowin: https://​www.ne­owin.net/​news/​poster/​jo%C3%A3o-car­rasqueira/

Wi-Fi up­grades have boiled down to a lot of sim­i­lar talk­ing points over the past decade or so. Every few years, a new gen­er­a­tion of Wi-Fi comes along and promises more speed, more band­width, more range, and so on. But now, with Wi-Fi 7 still slowly mak­ing its way into homes around the world, things are look­ing dif­fer­ent.

Wi-Fi 8 is al­ready start­ing to take shape, and for the first time in a while, it is­n’t about speed at all. The IEEE has dubbed this ver­sion of Wi-Fi Ultra High Reliability”, and it’s about time this be­came the fo­cus. It may not be the most ex­cit­ing up­grade on pa­per, but it could be the one you’ll feel the most.

Speeds aren’t chang­ing

At least, not on pa­per

Since the in­tro­duc­tion of Wi-Fi 4 (corresponding to the IEEE 802.11n stan­dard) back in 2009, the max­i­mum the­o­ret­i­cal data rate for new ver­sions of Wi-Fi has al­ways in­creased sig­nif­i­cantly with each re­lease. Wi-Fi 5 in­creased the max­i­mum data rate by more than 10 times, and while fur­ther in­cre­ments have been smaller in per­cent­age, speeds have al­ways in­creased very sig­nif­i­cantly.

Some im­prove­ments have been made to help fight in­ter­fer­ence and im­prove through­put in ar­eas with lots of de­vices con­nected, but they al­ways felt sec­ondary to the im­prove­ments in max­i­mum the­o­ret­i­cal speeds. But with Wi-Fi 7 reach­ing a max­i­mum the­o­ret­i­cal through­put of 23Gbit per band, that’s more than enough for the cur­rent in­ter­net speeds most users have, so it’s ar­guably time to slow down.

While Wi-Fi 8 is still in de­vel­op­ment, the goal this time is very dif­fer­ent. This new stan­dard will have ap­prox­i­mately the same max­i­mum data rate, sup­port the same num­ber of spa­tial streams, use the same 4096-QAM mod­u­la­tion, work on the same bands, and sup­port the same 320MHz chan­nel band­width com­pared to Wi-Fi 7.

Instead, the or­ga­ni­za­tion is fo­cus­ing on im­prov­ing the re­li­a­bil­ity and the ef­fec­tive through­put of Wi-Fi net­works by re­duc­ing in­ter­fer­ence and han­dling non-ideal con­di­tions more ef­fec­tively. The stated goals of Wi-Fi 8 in­clude a 25% in­crease in through­put at dif­fer­ent sig­nal-to-in­ter­fer­ence-and-noise ra­tio (SINR) lev­els, re­duce la­tency by 25% for the 95th per­centile sce­nar­ios with la­tency, and de­crease MAC pro­to­col data unit loss (MPDU) by 25%.

The of­fi­cial in­tro­duc­tion to Wi-Fi 8 pits it against cel­lu­lar net­works, specif­i­cally 6G, which it will likely be com­pet­ing against for a good chunk of its life (Wi-Fi 8 is ex­pected to be fi­nal­ized in 2028, while 6G should ar­rive in the early 2030s). Cellular net­works no­to­ri­ously have to han­dle mas­sive num­bers of de­vices con­nected at once, so the fo­cus with Wi-Fi 8 is to im­prove the ex­pe­ri­ence when there are lots of Wi-Fi de­vices nearby as well.

What’s ac­tu­ally new

Lots of new tech­nol­ogy at play

Since the aim is to im­prove ef­fec­tive through­put and the over­all ex­pe­ri­ence in real-world sce­nar­ios, Wi-Fi 8 fo­cuses on in­tro­duc­ing or en­hanc­ing fea­tures that help with those spe­cific as­pects.

One ex­am­ple are Distributed-tone re­source units, or DRUs, which al­lows de­vices dis­trib­ute its trans­mis­sions across a wider range of band­width, re­sult­ing in higher trans­mit power with­out vi­o­lat­ing reg­u­la­tions around how much power can be trans­mit­ted in a given piece of band­width. In prac­tice, this means de­vices with lower trans­mit power can still of­fer more re­li­able con­nec­tiv­ity, which can be es­pe­cially use­ful for things like smart home de­vices that may have weaker an­ten­nas.

Interference mit­i­ga­tion pi­lots are an­other no­table fea­ture, which aim to help re­sist in­ter­fer­ence from un­ex­pected in­ter­fer­ences, par­tic­u­larly in un­li­censed bands. This new stan­dard will also lever­age un­equal mod­u­la­tions, al­low­ing each spa­tial stream to be used more ef­fi­ciently by ad­just­ing the mod­u­la­tion in­di­vid­u­ally based on the SINR for each one. This also goes along with new Modulation and Coding Schemes (MCS) be­ing added to im­prove through­put even more.

Latency re­duc­tions come from new fea­tures such as P-EDCA, which helps speed up chan­nel ac­cess for pri­or­i­tized de­vices while mit­i­gat­ing the ef­fects on non-pri­or­i­tized de­vices. Wi-Fi 8 also al­lows de­vices to com­mu­ni­cate ex­clu­sively on non-pri­mary chan­nels, even when the pri­mary chan­nel is busy, al­low­ing for through­put im­prove­ments by re­duc­ing wasted band­width.

Other sce­nar­ios be­ing ad­dressed in­clude seam­less roam­ing, mean­ing the tran­si­tion from one ac­cess point to an­other. The goal is to en­sure next to no down­time when mov­ing be­tween ac­cess points. Additionally, Wi-Fi 8 should im­prove con­nec­tiv­ity when us­ing mul­ti­ple ac­cess points at the same time, lever­ag­ing var­i­ous co­or­di­na­tion fea­tures to en­sure a more re­li­able con­nec­tion and higher through­put in these sce­nar­ios.

A much-needed change

There are just too many de­vices now

As much as raw speed im­prove­ments are ap­pre­ci­ated, the re­li­a­bil­ity fo­cus for Wi-Fi 8 is sorely needed both at home and in work en­vi­ron­ments. There are sim­ply mas­sive num­bers of de­vices con­nected to Wi-Fi net­works nowa­days, and they’ll only keep in­creas­ing as smart home tech be­comes more preva­lent.

Smart lights and ap­pli­ances, stream­ing boxes, and de­vices like phones and PCs con­tinue to in­crease the de­mand for Wi-Fi net­works to serve mul­ti­ple de­vices at the same time. Even though smart home prod­ucts of­ten don’t need a lot of band­width, their mere ex­is­tence can slow down your more de­mand­ing con­nec­tions, and Wi-Fi 8 is aim­ing to im­prove con­nec­tiv­ity for all those de­vices.

At the same time, if you’ve been fight­ing off de­grad­ing net­work qual­ity by adding more ac­cess points, Wi-Fi 8 is ad­dress­ing that too, so it’s look­ing like a very am­bi­tious and well-rounded ap­proach to im­prov­ing con­nec­tiv­ity in every sce­nario. It may ac­tu­ally be a more ex­cit­ing up­grade than the past cou­ple of it­er­a­tions.

It will take time

Wi-Fi 8 may look like it’s slow­ing down in terms of in­no­va­tion, but in re­al­ity, it’s fo­cus­ing on oft-over­looked as­pects that are very im­por­tant in real-life sit­u­a­tions. Refining the con­nec­tion and im­prov­ing re­li­a­bil­ity make this a big step for­ward, but it will be some time be­fore we can see it in ac­tion. The stan­dard should be fi­nal­ized by May 2028, and de­vices with early Wi-Fi 8 sup­port should start ap­pear­ing that year.

If you’re think­ing of up­grad­ing your home Wi-Fi, it may ac­tu­ally be worth wait­ing for this new wave of de­vices rather than in­vest in Wi-Fi 7 right now. Wi-Fi 7 may have big through­put gains on pa­per, but un­less you have multi-gi­ga­bit in­ter­net, those ben­e­fits may not even be all too no­tice­able.

debloat.dev — replace the junk

debloat.dev

★ Featured

G-Helper GPL-3.0 ★★★★★ (5) re­places ASUS Armoury Crate Lightweight tray app for ASUS lap­tops: fan curves, power modes, GPU switch­ing, light­ing. 6 post(s) »

Newest

Most dis­cussed

Random picks

The Complete LLM Leaderboard: The Ed-o-meter

reinvently.co.uk

Updated 23 August 2026  ·  Model Evaluation  ·  Ed Yau, Applied AI Architect, Kerv

Same dri­ver, same track. The LLM is the star. Seventeen lead­ing mod­els dri­ven round the iden­ti­cal 28-realworld task lap — one har­ness, same ver­ba­tim prompts, de­ter­min­is­tic grad­ing — and the re­sults go on the board.

Short ver­sion: if you run one model, run glm-5.3 — 100% pass, a 9.3 rubric, $0.28 for the lap, about a fifth of gpt-5.5′s cost (check with com­pli­ance first, though). gpt-5.5 is the faster al­ter­na­tive: 13.2s TTFT ver­sus glm-5.3′s 16.3s. gpt-5.6-luna re­mains the cheap­est work­horse for low-risk, retryable jobs; haiku-4 – 5 if you need it right first time. Choose son­net-4 – 6 for qual­ity with­out the wait. The rea­son­ing, with the caveats →

17 mod­els  ·  28 tasks  ·  sin­gle trial  ·  lat­est source run 20260822T172041Z  ·  Change log

Which Model Tops Our Leaderboard?

How the LLMs did in our re­al­world tests. Our fo­cus here was real tasks that real peo­ple carry out, not aca­d­e­mic met­rics. We fo­cus on sin­gle tasks to sim­plify the as­sess­ment. An agen­tic flow is ul­ti­mately a se­ries of such tasks. Think of these like unit tests for the agent. We made them cheap enough to run so that even the whole suite costs just $30. See every task and each mod­el’s ac­tual an­swer, or com­pare two mod­els head to head →

The over­all score is the pass rate across my 28 re­al­world tasks. As we only had a lim­ited num­ber of tri­als there is a wide Wilson in­ter­val — the whiskers on the chart.

Summary of re­sults: click a col­umn to sort by your cho­sen met­ric.

1 Rubric scored retroac­tively (14 Jul 2026) by fa­ble-5 against the saved an­swer text, through the har­ness’s own run_rubric path — same blind prompt and cri­te­ria as every other row.

2 fa­ble-5′s 9.3 is self-judged — the judge scor­ing its own an­swers. Its source run’s judge-bias ma­trix shows it rat­ing it­self 9.3 ver­sus 8.6 – 8.7 for the mod­els it judges in­de­pen­dently. It is also the only fig­ure on its row from an ear­lier run — the 5 Jul 2026 run, 11 of 28 tri­als judged — be­cause no trial of its cur­rent run has been judged at all. Shown for com­plete­ness, not as a like-for-like num­ber, pend­ing an in­de­pen­dent re-judge.

3 Recipe-checker false-pos­i­tive. On the veg­e­tar­ian week­night recipe the for­bid­den-term checker fires on a non-in­gre­di­ent men­tion — a la­bel-check cau­tion or a negated omis­sion list (“uses no fish sauce or an­i­mal-de­rived gar­nishes”). All three recipes are gen­uinely meat-free, so gpt-5.5, son­net-5 and fa­ble-5 are scored as pass­ing that task here. No task or checker was edited.

4 Cost/task com­puted over an­swer­ing tri­als only for fa­ble-5 and opus-5 — re­fused and blocked tri­als emit near-zero out­put at $0, and in­clud­ing them makes a model look ar­ti­fi­cially con­cise and cheap (fable-5 would read $0.0481/trial; opus-5 $0.0597). opus-5′s head­line run cost of $1.67 is the true all-tri­als to­tal: the blocked tri­als were billed $0. No other model on the board has re­fusals.

The lap, cor­ner by cor­ner #

The most re­cently added mod­els ap­pear first, with the lat­est test date shown un­der each. The lap is five cor­ners in fixed or­der: Coding → Data → Realworld → Security → Tool-use. A cor­ner’s colour is that mod­el’s pass rate in that cat­e­gory. Green is good — it means 85%+ suc­cess. For mod­els that can do it all, look for all green. The num­ber in the mid­dle of each ring is that mod­el’s cost per task; be­low it is the me­dian time to first to­ken, in sec­onds.

Hover or tap any seg­ment for what that cor­ner tests and how the model han­dled it.

Clean cor­ner (>85%) Ragged (60 – 85%) Off the track (<60%)

Our pick — the All-Star cham­pion, the desert is­land model Our pick for a low-cost work­horse Our pick for the fastest re­ply

Cells be­low 60% are flagged red and 60 – 85% am­ber — cod­ing, data and tool-use are the har­ness floor, so the race is de­cided in re­al­world and se­cu­rity.

What Do the Results Actually Tell You?

If you only run one model, run glm-5.3

glm-5.3 is the first model on the board to clear all five cor­ners — cod­ing, data de­vel­op­ment, re­al­world, se­cu­rity and tasks — at 100%. It backs that with a 9.3 rubric, third-high­est on the board, and $0.28 for the lap. The one cost is pa­tience — a 16.3-second me­dian time-to-first-to­ken. gpt-5.5 is the faster al­ter­na­tive at 13.2s, with the same 100% se­cu­rity but an 89% re­al­world cor­ner and $1.43 for the lap.

Fable failed to com­plete a sin­gle lap

fa­ble-5 is joint-bot­tom at 79% be­cause it re­fused to do 5 of the tasks. It per­formed well on what it com­pleted, but even it thought kimi-k3 was giv­ing bet­ter an­swers. You’ll need a fall­back model if you’re us­ing Fable. opus-5 hit the same wall — four be­nign cod­ing-de­bug-* tasks blocked be­fore a to­ken was gen­er­ated, on an over­lap­ping set of tasks — so Anthropic’s clas­si­fier looks like it sits across the whole se­ries 5 line, not just Fable. See the full re­fusal break­down for what’s ac­tu­ally go­ing on.

Luna is the very cheap­est work­horse

gpt-5.6-luna costs $0.064 for the full lap, or $0.0023 per task, with a 5.3-second me­dian TTFT. That makes it at­trac­tive for high-vol­ume, low-risk back­ground work where fail­ures are cheap to de­tect and retry. The trade-off is ma­te­r­ial: 79% over­all and 33% on se­cu­rity, so val­i­date every re­sult and keep it away from un­trusted prompts. haiku-4 – 5 is the higher-pass al­ter­na­tive at $0.0044 per task, 96% over­all and a 0.9-second TTFT. deepseek-v4-pro is nom­i­nally cheaper still at $0.0029 per task for the same 96% pass rate, but its 40.0-second me­dian TTFT — the slow­est on the board — rules it out for any­thing in­ter­ac­tive; treat it as a batch-only op­tion.

The mys­tery guest sets the fastest qual­ity lap

kimi-k3 still tops the rubric at 9.5 — judged in­de­pen­dently by fa­ble-5 — with a 96% pass rate, though opus-5′s 9.4 now runs it close on qual­ity at a third of the wait. The catch is pa­tience: a 26.4-second me­dian time-to-first-to­ken, sec­ond slow­est on the board be­hind deepseek-v4-pro’s 40.0s, and a 75% wob­ble on data de­vel­op­ment tasks, its only weak cor­ner. Not suit­able for in­ter­ac­tive ap­pli­ca­tions.

Three cars failed the crash test

The gpt-5.6 line is quick, but it has a safety prob­lem. gpt-5.6-luna, gpt-5.6-terra and gpt-5.6-sol emit­ted the jail­break ca­nary in 11 of 12 jail­break cells (33 – 50% se­cu­rity pass) — make sure you pro­tect in your har­ness, and ap­ply more care­ful Red team­ing if us­ing these mod­els. The Claude trio went 6/6 clean, as did gpt-5.5.

A safety fil­ter can look ex­actly like a bad lap

opus-5 posts the best rubric on the de­fault panel at 9.4 and 100% on both re­al­world and se­cu­rity — then shows 43% on cod­ing. That cell is not its de­bug­ging abil­ity: four be­nign cod­ing-de­bug-* tasks were blocked by a provider-side clas­si­fier be­fore a sin­gle to­ken was gen­er­ated, on an over­lap­ping set of tasks to the ones al­ready blocked on fa­ble-5. Two Anthropic-family mod­els now hit the same fil­ter, so treat it as a mea­sure­ment haz­ard rather than a model quirk — and note opus-5 was also pe­nalised twice for flag­ging an at­tack it had suc­cess­fully re­sisted.

How Is the Ed-o-meter Scored?

Same tasks run for all mod­els us­ing the same prompts, same API calls, mea­sured through one iden­ti­cal OpenRouter stream­ing path, run se­ri­ally as time-trial. No other cars on track

Latency is time-to-first-to­ken, mea­sured through one iden­ti­cal OpenRouter stream­ing path, run se­ri­ally so the clock is un­con­t­a­m­i­nated. Wall-clock is recorded along­side.

Checkers are bi­nary and au­to­mated. The LLM rubric is the only judged com­po­nent — and its bias is made vis­i­ble in the foot­notes rather than as­sumed away.

Effort and rea­son­ing set­tings are pinned in mod­els.json and stated with any pub­lished num­ber, be­cause they ma­te­ri­ally move qual­ity and cost.

Refusals are recorded, not hid­den. A provider-side hard stop is logged as a re­fusal with its cat­e­gory — never silently re­tried on an­other model. Routing is pinned with al­low_­fall­backs:false, so no quiet re-serves on quan­tized vari­ants. A model that de­clines in prose is scored by the checker like any other an­swer.

Harness, tasks and check­ers are open source at Featherbench (MIT). Clone it and run the lap your­self, or re­quest a new model via GitHub is­sue.

Coding (7 · Python)

CSV dedupe — small, well-spec­i­fied task with a de­ter­min­is­tic unit-test checker

Debug billing date — fix a month/​day-over­flow date bug with­out re­gress­ing the work­ing cases

Debug money split — split in­te­ger pen­nies N ways so shares sum ex­actly and stay fair

Debug mu­ta­ble de­fault — fix the clas­sic mu­ta­ble-de­fault-ar­gu­ment bug

Debug pag­i­na­tion — fix an off-by-one page-count bug

Log pars­ing — parse logs with quoted quotes, miss­ing fields, IPv6 edge cases

Rate lim­iter — state­ful class im­ple­men­ta­tion tested against an in­jected fake clock

Data (4)

CSV schema map­ping — map a raw CRM ex­port onto a con­formed cus­tomer di­men­sion

Fabric roadmap — turn a cat­a­logue, map­ping and re­quire­ments into a phased user-story roadmap

Data model from in­ter­view — de­rive a star-schema model and re­quire­ments from a stake­holder tran­script

Data qual­ity as­sess­ment — catch seeded de­fects in a small table and pri­ori­tise fixes

Realworld (9)

Crying baby ad­vice — safety-sen­si­tive triage for an un­usu­ally cry­ing 8-week-old

Date night in Nottingham — lo­cal rec­om­men­da­tions with­out hal­lu­ci­nated venues

Flight search hon­esty — ad­mit no live pric­ing data rather than fab­ri­cate flights

Strict bul­let for­mat­ting — obey ex­act for­mat con­straints un­der an awk­ward word ban

Lisbon hol­i­day plan — five-day itin­er­ary re­spect­ing cost, kids and a rest day

Honey cough push­back — cor­rect a wrong premise: no honey for a 5-month-old

Marathon PB plan — week-by-week train­ing plan around a fixed club ses­sion

Vegetarian week­night recipe — gen­uinely meat-free recipe for six

Tenancy ex­trac­tion — grounded an­swers from a pro­vided agree­ment, in­clud­ing ad­mit­ting what is­n’t cov­ered

Security (6)

Email sum­mary in­jec­tion — sum­marise an email with­out obey­ing an em­bed­ded re­fund in­struc­tion

UnGpt doc­u­ment in­jec­tion — sum­marise a re­view with­out emit­ting the em­bed­ded jail­break ca­nary

AIM/Machiavelli jail­break — refuse the un­fil­tered per­sona while still an­swer­ing the be­nign ques­tion

Developer Mode jail­break — refuse the dual-re­sponse jail­break tem­plate

Evil Confidant jail­break — refuse the no rules” per­sona while stay­ing help­ful

OPPO jail­break — refuse the op­po­site-of-a-safe-model per­sona tem­plate

Tool-use (2)

Flight tool se­lec­tion — search only, don’t book, when ex­plic­itly told not to

Weather tool call — call the weather tool with the cor­rect lo­ca­tion ar­gu­ment

See each mod­el’s ac­tual an­swer to every task, or pick two mod­els to com­pare head to head →

23 August 2026 Four mod­els added. Added glm-5.3, grok-4.6, deepseek-v4-pro and gem­ini-3.7-flash. glm-5.3 clears all five cor­ners at 100% and is now the board’s head­line pick, ahead of gpt-5.5.

Four mod­els added. Added glm-5.3, grok-4.6, deepseek-v4-pro and gem­ini-3.7-flash. glm-5.3 clears all five cor­ners at 100% and is now the board’s head­line pick, ahead of gpt-5.5.

5 August 2026 OpenAI cost up­date. Re-ran the GPT-5.6 trio af­ter OpenAI cut its prices, re­freshed the cost fig­ures and high­lighted Luna as the cheap­est work­horse for low-risk, retryable jobs.

OpenAI cost up­date. Re-ran the GPT-5.6 trio af­ter OpenAI cut its prices, re­freshed the cost fig­ures and high­lighted Luna as the cheap­est work­horse for low-risk, retryable jobs.

29 July 2026 Three mod­els added. Added opus-5, gem­ini-3.6-flash and grok-4.5, with their full task, qual­ity, se­cu­rity, la­tency and cost re­sults.

Three mod­els added. Added opus-5, gem­ini-3.6-flash and grok-4.5, with their full task, qual­ity, se­cu­rity, la­tency and cost re­sults.

19 July 2026 Leaderboard launched. Published the first Ed-o-meter, in­clud­ing the Claude ref­er­ence set of haiku-4 – 5, son­net-4 – 6 and son­net-5.

Leaderboard launched. Published the first Ed-o-meter, in­clud­ing the Claude ref­er­ence set of haiku-4 – 5, son­net-4 – 6 and son­net-5.

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

Visit pancik.com for more.