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.”

The Golden Rule for Becoming a Better Writer

nappertime.com

I’m ob­sessed with the craft of writ­ing. I write every day, I read about the craft of­ten, and in my spare time I like to un­wind by… watch­ing in­ter­views where au­thors talk about their writ­ing process. It’s a sick­ness. Help me.

One of the key things I’ve learned is this: there’s no real blue­print. I say this to as­pir­ing writ­ers in my work­shops, and those I men­tor. There’s no one way — every writer will have a dif­fer­ent path to cre­ation. Now, this does­n’t mean you should­n’t be lis­ten­ing to other au­thors, not at all — it’s a great way to help you think about the cre­ative process — but it does mean noth­ing is holy writ.

Except the one golden rule*. One rule that is true, no mat­ter the writer. One rule, that if you don’t fol­low, means you should­n’t be writ­ing in the first place.

Here it is: Read as much as you can. Read widely and well.

I would’ve thought the ne­ces­sity of read­ing in this pro­fes­sion ob­vi­ous. But I’ve no­ticed a wor­ry­ing trend lately: as­pir­ing writ­ers who don’t read.

Whenever I give a work­shop, or an oc­ca­sional cre­ative writ­ing lec­ture at uni, or men­tor an in­di­vid­ual, I al­ways ask the fol­low­ing ques­tions: who are your favourite au­thors? And, what are you read­ing now? I do this as a short cut to find­ing out their in­ter­ests, and how there­fore I might frame my ad­vice.

But over the past few years, more and more the an­swer will be: I’m too busy to read. Or: I haven’t read a book in a while (whereafter they rack their brains and tell me they might’ve read Fourth Wing a year back).

To which I say this: fuck you, you’re not too busy.

Joking. I would never say that. But I cer­tainly fuck­ing think it. Now, to be clear — I’m not diss­ing the Fourth Wing here. On the con­trary: if Fourth Wing is a gate­way drug to get­ting some­one back into read­ing, then any­one who loves books should be thank­ful to Rebecca Yarros.

But I am say­ing this: go look at your phone, and tell me what your av­er­age screen time is per day. Two hours? Five? Seven? If so — shut up: you’ve time to read.

I write full-time, cur­rently work three gig jobs on the side, and am en­gaged with lives of my two chil­dren. I read every night. It’s not hard: in­stead of star­ing at my phone, or stream­ing, I read. This is not a boast, nor is it spe­cial. This is my job as a writer.

You want to be a writer? Then shut up and read.

Here’s why:

1) Reading teaches the writer about the craft

Every book is an ed­u­ca­tion. Good, bad, mediocre, they teach us the writ­ing craft. Even if we’re not study­ing the text per se, we’re learn­ing. All the books you’ve ever read — es­pe­cially the books you read when you were younger — have im­printed them­selves on your brain.

It might be genre, char­ac­ter type, trope, set­ting, struc­ture, any­thing, every­thing — you’ve ha­bit­u­ated your brain to the pat­terns and el­e­ments of the novel. Certain writ­ers will have a style that will ap­peal, and it is com­pletely fine to em­u­late that style as you de­velop your own voice’ as a writer (by voice I mean, the ex­pres­sion of in­di­vid­u­al­ity in your art).

When I be­gan writ­ing, I had some early beta read­ers say: oh, I see you’ve fol­lowed the clas­sic three-act struc­ture. To which I thought: I did? I did­n’t know struc­ture back then; I’d never taken a cre­ative writ­ing class. Yet my writ­ing brain in­stinc­tively cre­ated one, be­cause it had been in­formed by my life as a reader.

In the years since, I’ve sub­se­quently taught classes on three and five-act struc­tures, and the pur­pose of struc­ture in gen­eral. I’m not say­ing such for­mal classes are of no value, but I do tend to think they are over­rated. The re­al­ity is, up un­til re­cent decades, creative writ­ing’ was not a de­gree in and of it­self. The much-vaunted MFA is only a rel­a­tively re­cent phe­nom­ena. They might be use­ful for some, but ul­ti­mately are pe­riph­eral com­pared to the cen­tral im­por­tance of read­ing.

2) Reading in­spires the writer

I love read­ing out of genre. The best ideas I get for sci­ence fic­tion don’t come from sci­ence fic­tion. Crime, for ex­am­ple — hard­boiled fic­tion in par­tic­u­lar — helped me bet­ter un­der­stand the ori­gins of cy­ber­punk, its the­matic core, and some of the styl­is­tic pos­si­bil­i­ties of the sub­genre. Non-fiction has given me an un­end­ing sup­ply of the raw ma­te­ri­als for story — whether that be cur­rent events, or his­tory, or sci­ence, or phi­los­o­phy, or any­thing else — and been a con­stant source of in­spi­ra­tion. Poetry, as a third ex­am­ple, has taught me how I might use words in an el­e­gant way, and with the strictest of econ­omy cre­ate an im­age, or a mood, or a feel­ing.

A book al­most al­ways has some­thing to teach us — even if it’s how not to write.

3) Reading changes the struc­ture of the brain

There was a ter­ri­ble American TV show called Everyone Loves Raymond. I re­mem­ber lit­tle about it, other than when it came on, I tended to change the chan­nel (the show is so old that chang­ing chan­nels was still a thing). But to this day I re­mem­ber an ex­change be­tween the two leads. Raymond has just left his job as a jour­nal­ist.

His wife says to him: Why don’t you write the great American novel?”

Raymond replies: Write it? I would­n’t want to read it.”

Cue the canned laugh­ter. It is a lit­tle funny, I guess, be­cause Raymond has no in­ter­est in lit­er­a­ture, so the thought of him writ­ing it is ab­surd.

But here’s the thing: it sums up what’s wrong with the men­tal­ity of many an as­pir­ing writer to­day. One I sim­ply don’t un­der­stand. Why be a writer if you don’t love read­ing? Why de­vote your in­tel­lec­tual and emo­tional en­ergy to cre­at­ing a book, when it’s a form you’re not in­vested in? Why write, when you aren’t steeped in won­der of sto­ry­telling?

Think about the great film di­rec­tors. Nolan, or Tarantino, or Scorsese, any of them. They love film. They live and breathe it. Their knowl­edge of cin­ema is en­cy­clopaedic and it has with­out ques­tion in­spired them and made them bet­ter di­rec­tors. Their cin­e­matic vi­sion has been in­formed by the rich­ness of the his­tory of cin­ema, and re­alised through their life-long com­mit­ment to the form.

Literature is no dif­fer­ent. Take Le Guin, or Virginia Woolf, or Nabokov. These writ­ers were ex­tra­or­di­nar­ily well-read, whose pas­sion for the writ­ten word in­fused their en­tire cre­ative ex­is­tence, whose time, when not writ­ing, was of­ten spent dis­cussing or re­view­ing or de­bat­ing nov­els.

That’s the thing about Generative AI. It gives all the Raymonds out there, the peo­ple who don’t even like read­ing, the ca­pac­ity to gen­er­ate a book. It’s not just that they are lazy and tal­ent­less, they’re not even in­ter­ested in lit­er­a­ture. They don’t ac­tu­ally like art, they just like the idea of mak­ing art.

But I don’t want to waste my time talk­ing about those losers (and yes, I’m get­ting to the part about brain struc­ture — this pre­am­ble is rel­e­vant). This ar­ti­cle is not for them, but for you, the as­pir­ing writer (or, per­haps, some­one like me, a pub­lished au­thor who yet is ob­sessed with the way oth­ers con­ceive of their craft).

I read 52 books a year. I have friends who read over a hun­dred (which for me per­son­ally would be too much: I like to savour my books). Some au­thors I know read as low as 20, and that re­ally is the bare min­i­mum.

Reading changes the struc­ture of the brain, and for the good. But here’s the rub: a dig­i­tal ad­dic­tion also changes your brain, and for the ill.

This is a phe­nom­e­non dealt with by Maryanne Wolf in Reader, Come Home: The Reading Brain in a Digital World,’ but which I’ve seen else­where, time and again, in opin­ion ar­ti­cle and in peer re­viewed sci­ence. In essence, the dig­i­tal brain — dis­tracted by so­cial me­dia, fiercely hunt­ing for the next en­dor­phin hit, its at­ten­tion span se­verely lim­ited — is anath­ema to the read­ing brain, which needs time, sus­tained con­cen­tra­tion, vivid imag­i­na­tion, and crit­i­cal think­ing skills.

More and more we lose the abil­ity to im­merse our­selves in a book, be­cause we’ve rewired our neural path­ways to the dig­i­tal ex­pe­ri­ence. You know the feel­ing. The urge to keep pick­ing up your phone, the doom scrolling that eats un­told hours/​days/​weeks from your life, the anx­ious­ness caused by your so­cial me­dia feed and the anx­ious­ness caused by not hav­ing ac­cess to your so­cial me­dia feed. It’s a per­ni­cious age, where the smart phones we all must carry are in­fested by apps al­go­rith­mi­cally de­signed by the bio­hack­ers of the large tech com­pa­nies to hi­jack the time­line of your life, and di­vert your at­ten­tion.

And here’s the thing: the read­ing brain — which many of us are los­ing — is also the writ­ing brain. That is: at­ten­tion span, sus­tained con­cen­tra­tion, and a vivid imag­i­na­tion are fun­da­men­tal skills re­quired the au­thor. Writing a book is like run­ning a marathon, and the fit­ness regime re­quired to do so is read­ing. It builds your cre­ative mus­cles, the sta­mina to stay at your com­puter and find the words, and if you are lucky, en­ables the flow state of cre­ative writ­ing, where the world dis­ap­pears and all that re­mains is story. Flow state: that ex­tra­or­di­nary and rare ex­pe­ri­ence that yet all writ­ers have known, where sud­denly hours have passed while you’ve been im­mersed in story.

And to be clear: if you are ad­dicted to the dig­i­tal, there’s hope for you yet. Just a few weeks of putting aside the phone at night, of set­tling down with a book for an hour, this will change your brain. It will de­velop your writ­ing mus­cles.

So there you have it: the se­cret to be­ing a bet­ter writer, and the se­cret all great writ­ers share. And I’ve given it to you for free. Now all you need to do, is do it, every day.

Go forth, and read.

My lat­est re­lease: This Machine Kills Billionaires

And click here for all my books.

(*It goes with­out say­ing that to you must write, as well. This is not a rule’ as such as it is a state­ment of re­al­ity: writ­ers write. Write as much as you can, as your sched­ule will al­low. No ex­cuses. Write).

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.

Thinking in Python

thinkinginpython.com

Bruce Eckel

Insights, Idioms and Patterns

01Introduction

Part I · Foundations

02Tour

03Containers

04Control Flow

05Functions

06Modules and Packages

07Classes

08Static Typing

09Class Attributes

10Cleanup

Part II · Techniques

11Testing

12Data Classes as Types

13Pattern Matching

14Decorators

15Context Managers

16Comprehensions

17Metaprogramming

18Performance

19Concurrency

Part III · Patterns

20Rethinking Objects

21The Pattern Concept

22Data Transfer Objects

23Iterators

24Singleton

25Template Method

26Surrogate

27Factory

28Function Objects

29Changing the Interface

30Observer

31State Machines

32Multiple Dispatching

33Visitor

34Composite and Interpreter

35Flyweight

36Memento

37Pattern Refactoring

38Simulation

39Pattern Catalog

Part IV · Functional Programming

40Foundations

41Toolkits

42Error Handling

43Assurance

Part V · Effects

44Effect Management

45Generators

46Stateless

47Stateless in Practice

© 2026 Bruce Eckel. Licensed CC BY-NC-ND 4.0.Freely read­able on­line. No re­pro­duc­tion with­out per­mis­sion.

Book Examples & Exercise Solutions on GitHub

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.

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.

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.

MartyPC Web Edition

martypc.net

Choose a System

Loading sys­tems…

Use the ar­rows or key­board to ro­tate Swipe or tap the ar­rows to ro­tate

The invisible passenger in your car

securelist.com

While mon­i­tor­ing Android threats in June 2026, we dis­cov­ered a new piece of Android mal­ware. What struck us as un­usual was that it in­stalled like an or­di­nary user app yet made no at­tempt to dis­guise it­self as le­git­i­mate soft­ware: it had no user in­ter­face at all. This led us to sus­pect the app might be reach­ing users’ de­vices with­out their knowl­edge. Further in­ves­ti­ga­tion con­firmed that hy­poth­e­sis and al­lowed us to re­con­struct the en­tire in­fec­tion chain.

Key find­ings:

We iden­ti­fied new Android mal­ware: a multi-stage down­loader whose ul­ti­mate pur­pose is ad fraud and cre­ation of a proxy bot­net.

The mal­ware spread through the built-in up­daters of Android-based au­to­mo­tive head unit firmware. This is the first doc­u­mented case of mal­ware found on a car head unit with an in­fec­tion chain spe­cific to that type of de­vice.

We at­tribute this ac­tiv­ity, with high con­fi­dence, to the MoYu Group, an ac­tor linked to the BADBOX bot­net.

Kaspersky so­lu­tions de­tect the threats de­scribed be­low un­der the fol­low­ing de­tec­tion names:

HEUR:Trojan-Dropper.AndroidOS.Agent.vu

HEUR:Trojan-Downloader.AndroidOS.Agent.ov

HEUR:Trojan-Proxy.AndroidOS.Zhima.*

HEUR:Trojan.AndroidOS.Vo1d.*

Head unit firmware overview

A head unit is a sys­tem that com­bines mul­ti­me­dia func­tions with par­tial con­trol over cer­tain ve­hi­cle func­tions. Head units may come as part of a car’s fac­tory equip­ment or as an af­ter­mar­ket up­grade. The main at­tack vec­tors for these sys­tems are com­pro­mise via phys­i­cal ac­cess and vul­ner­a­bil­i­ties in the head unit’s OS or com­po­nents, both of which we’ve cov­ered pre­vi­ously.

In some cases, head units run on Android, pri­mar­ily be­cause it’s con­ve­nient for man­u­fac­tur­ers: Android’s source code al­ready ac­counts for use cases within au­to­mo­tive head units. Android also al­lows man­u­fac­tur­ers to add their own sys­tem ap­pli­ca­tions dur­ing the build process, which they can use for a range of pur­poses: cus­tomiz­ing the UI, adding sys­tem com­po­nents tai­lored to the ven­dor’s needs, and more.

Most apps de­vel­oped for Android de­vices can also run on an Android-based head unit, and that is true for mal­ware as well. That said, it’s hard to imag­ine cer­tain cat­e­gories of smart­phone-tar­geted mal­ware be­ing used to at­tack a head unit. Banking Trojans are a good ex­am­ple: since mo­bile bank­ing is used al­most ex­clu­sively on smart­phones, in­fect­ing a head unit with a bank­ing Trojan would be a waste of the at­tack­er’s re­sources.

It’s worth not­ing that head units of­ten in­clude SIM card slots and can con­nect to the in­ter­net, en­abling fea­tures like nav­i­ga­tion and soft­ware up­dates. Since a head unit typ­i­cally holds noth­ing of value to an at­tacker, one of the more likely at­tack sce­nar­ios us­ing classic” Android mal­ware is in­fect­ing the de­vice to re­cruit it into a bot­net – sim­i­lar to at­tacks on IoT de­vices.

During our re­search, we found ex­actly that kind of mal­ware. The de­sign of firmware for DoFun head units en­abled at­tack­ers to dis­trib­ute mal­ware. We no­ti­fied the ven­dor about the dis­tri­b­u­tion scheme, and they sub­se­quently re­ported fix­ing the se­cu­rity is­sues.

Below is the en­tire in­fec­tion chain:

Head unit in­fec­tion scheme

Let’s look at ex­actly how these head units be­came in­fected.

The TWCore app

TWCore is a le­git­i­mate sys­tem ap­pli­ca­tion re­spon­si­ble for col­lect­ing an­a­lyt­ics data and up­dat­ing the head unit soft­ware. Let’s take a closer look at how the up­date func­tion works.

The process is fairly sim­ple. An MQTT mes­sage bro­ker hosted on the sub­do­main car­door[.]cn sends a mes­sage con­tain­ing in­for­ma­tion about the APK files that need to be down­loaded and in­stalled on the head unit. Notably, the ob­ject de­scrib­ing this mes­sage in­cludes an in­stall­No­tEx­ists field, a Boolean flag that can be set to true or false. This flag al­lows TWCore to in­stall apps that weren’t orig­i­nally pre­sent on the de­vice.

TWCore only checks whether an app is al­ready in­stalled on the de­vice when in­stall­No­tEx­ists = false

The APK file is down­loaded to <TWCore ex­ter­nal cache dir>/​push/​apk/ for in­stal­la­tion.

The path TWCore uses to down­load APK files

Our teleme­try re­vealed pre­vi­ously un­known mal­ware at these file paths. On top of that, our data in­di­cates that in every ob­served case, the mal­ware was in­stalled by an app with the pack­age name com.tw.core, which matches the TWCore pack­age name.

Next, we’ll break down the mal­ware in­stalled by TWCore: the JarService drop­per.

Stage 1: the JarService drop­per

As men­tioned ear­lier, JarService is a small drop­per app with no UI of any kind. It de­crypts data stored as en­crypted blocks within the Trojan’s code. Each block is XOR-encrypted with a sin­gle-byte key that shifts lin­early from block to block. The de­crypted data con­tains se­ri­al­ized in­for­ma­tion about the pay­load ver­sion and en­try point, along with the mal­ware’s own code for fur­ther load­ing.

Decrypting and de­se­ri­al­iz­ing in­for­ma­tion about the stage 2 pay­load

In the ver­sion of JarService we an­a­lyzed, the en­try point for the next-stage pay­load was the wa method of the com.c.j.qbh class.

Stage 2: the loader

This stage’s pay­load is a ma­li­cious loader. Its code con­tains en­crypted strings that are later used as class names to ex­e­cute the stage 3 pay­load us­ing the re­flec­tion mech­a­nism. The loader sends im­plant in­for­ma­tion to one of the at­tack­ers’ servers via a POST re­quest. Example of a re­quest to the C2 server:

1

2

3

4

5

6

7

8

9

{

userId”: REDACTED,

dexVersion”: 1.7″,

dexType”: 1,

channelId”: 2039″,

packageName”: com.tw.jar1″,

appVersion”: 12,

appName”: JarService”

}

In re­sponse to the POST re­quest, the C2 server re­turns a link for down­load­ing the stage 3 pay­load. An ex­am­ple of a C2 re­sponse is shown be­low.

1

2

3

4

5

6

7

8

{

code”: 200,

data”: {

dexUrl”: hxxp://144.217.243[.]201/vr34der34/dex3.68.png”,

dexVersion”: 3.680,

status”: 0

}

}

The Trojan uses the link in the dex­Url field of the data ob­ject to down­load se­ri­al­ized data for load­ing the next stage. This data be­gins with a sin­gle-byte in­te­ger, a key used to de­crypt the strings in the load­er’s code. Immediately fol­low­ing this num­ber is a four-byte float­ing-point value used to XOR-decrypt the stage 3 pay­load, which it­self is lo­cated af­ter these keys.

Decrypting the stage 3 pay­load

In the de­crypted pay­load, the en­try point is the init method of the com.ast.sdk.Billing­Main class, shown in the screen­shot be­low.

Entry point of the stage 3 pay­load

While an­a­lyz­ing this stage, we no­ticed that the down­load link for the next-stage pay­load in­cludes a ver­sion num­ber. We de­cided to try other ver­sion num­bers to re­trieve dif­fer­ent pay­load ver­sions, and ul­ti­mately ob­tained seven dis­tinct vari­ants, which we list un­der Indicators of Compromise” at the end of this re­port. The ear­li­est ver­sion, num­bered 3.57, uses a dif­fer­ent de­cod­ing al­go­rithm than the one de­scribed above. This may in­di­cate that an ear­lier ver­sion of the in­fec­tion chain used a dif­fer­ent loader be­tween JarService and the stage 3 pay­load.

Stage 3: clicker / re­verse proxy loader

In this stage, the mal­ware sends a POST re­quest to /cpc/api/task every 90 min­utes by de­fault, con­tain­ing in­for­ma­tion about the in­fected de­vice (display res­o­lu­tion, de­vice model, the SSID of the con­nected Wi-Fi net­work, MAC ad­dress, and so on) along with the Trojan’s con­fig­u­ra­tion ver­sion. If the con­fig­u­ra­tion is out­dated, the C2 server re­turns an up­dated con­fig­u­ra­tion con­tain­ing new C2 ad­dresses and new paths for send­ing HTTP re­quests. An ex­am­ple of a re­sponse is shown be­low. Note that at the time of our re­search, the most up-to-date con­fig­u­ra­tion ver­sion was 3.82.

1

2

3

4

5

6

7

8

9

10

11

12

13

{

code”: 100,

data”: {

configVersion”: 3.820,

hosts”: [“hxxp://t2.kshahnd[.]sbs”, hxxp://t2.mdsjhd[.]sbs”, hxxp://t2.nmnsny[.]sbs”, hxxps://t2.nmnsny[.]sbs”],

interval”: 5500000,

reportApi”: /cpc/api/report”,

tagName”: config”,

taskApi”: /cpc/api/task”,

updates”: [“hxxp://a2.kshahnd[.]sbs”, hxxp://a2.mdsjhd[.]sbs”, hxxp://a2.nmnsny[.]sbs”, hxxps://a2.nmnsny[.]sbs”],

vn”: 1.010

}

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.