mo.sh retweeted
Crazy 72 hours in security. Three major incidents dropped back-to-back: eMudhra, PingCAP (TiDB Cloud), and PHP.
Here is the short version of what happened and who got hit.
1. eMudhra (Trusted CA compromise)
eMudhra generated 8 intermediate CA certificates in April 2025 (cross-signed by Sectigo). A bug in their HSM key-wrapping test script created a second set of P-384 keys where the private keys were single-byte numbers under 256. Operators picked the wrong key labels and signed them into real CA certs.
One of the intermediate CA private keys was literally the number 4.
The other seven: 56, 66, 115, 155, 156, 230, 237.
Three weeks later (May 2025), their CRL signatures started failing because the CRL signer was using the real keys instead of the weak ones. Instead of asking why the keys didn't match, someone switched the CRL signer to the weak keys and closed the ticket.
• Browsers are safe: Chrome, Firefox, Apple, and Microsoft already blocked them, and zero rogue certs hit CT logs.
• Servers are not: curl, Python (certifi), Go binaries, and Docker base images don't check CRLs. Update ca-certificates, certifi, and Go (1.27.3 / 1.26.10).
• 10-second check on any server:
curl dv-g3b-emudhra.we-have-a-pro…
(TLS error = safe. 200 OK = still vulnerable.)
2. PingCAP / TiDB Cloud (10.6 TB breach)
Attackers found GCP and Azure credentials committed inside PingCAP's own repos. They set up a replication feed of TiDB Cloud's production control plane and exported the entire database every 6 hours for 22 straight days. 88 full exports, zero alerts. 200 GB is already out on torrents.
Beyond the 413 private repos and 20.6M customer SQL queries logged from their web SQL Editor, PingCAP engineers were pasting customer secrets into Jira tickets.
Who is affected in the leaked records:
• Live credentials exposed in support tickets:
- Pinterest: AWS keys for their pingcap-logs S3 bucket
- CardX / Silverlake (NPCI-linked env): AWS admin key in a backup log with full access to 258 external S3 buckets
- DeBank: 38 presigned S3 URLs
- An unnamed AI/dev platform: a 314 MB slow-query log attached to a ticket containing 8,027 live customer secrets (an AWS root key, a GitHub admin PAT over 1,701 repos, 7,485 AWS STS tokens, and 192 OpenAI/Anthropic/Gemini keys)
• Tenants with infra metadata, VPC CIDRs, app-server IPs, or contract pricing exposed:
- Tech: Atlassian, Databricks, Airbnb, Baidu, LINE, Nylas, Persona, PatSnap
- E-comm & Travel: Booking.com, Shopee, Flipkart, Mercari, ZOZO, AEON, Delhivery, Klook
- Gaming: Capcom, Square Enix, Konami, Bandai Namco, Cygames, Colopl, DMM
- Finance: PayPay, SoftBank, SBI, SB Payment Service, Fujitsu, TOPPAN, Bank of China, China Life
- Crypto: Bitget (said only public trade logs were on it and they already left), Pionex, DigiPlus, NFTscan, Chainbase
• Developer profiles leaked (from a purchased reo.dev table in PingCAP's BigQuery):
- 24,900 personal emails + GitHub/LinkedIn profiles of engineers at Tencent (3,327), Huawei (2,726), ByteDance (2,475), AIG (2,140), Mastercard, Flipkart, and bKash.
If you use TiDB Cloud: rotate your console API keys, DB passwords, and anything you ever pasted into a support ticket.
3. PHP "PHP2Shell" (CVE-2026-109618 & CVE-2026-109619)
Two CVSS 9.2 pre-auth RCEs leaked yesterday ahead of today's 14:00 UTC patch.
Public writeups trace it to a heap Use-After-Free in PHP's native C multipart/form-data session upload-progress handler (ext/session/session.c).
Because C-level multipart parsing runs before line 1 of index.php:
• App auth, Laravel/WordPress middleware, and file_uploads = Off do not stop it.
• Only PHP 8.2–8.5 get official patches today (59% of PHP servers on Shodan are on EOL <= 8.1).
• Until you patch php-fpm: lock php_admin_flag[session.upload_progress.enabled] = off and block unexpected multipart requests at Nginx/Apache/Cloudflare.
mo.sh retweeted
Before you launch anything, have Opus 5.5 send 5 subagents in as your first users.
Paste this into Claude Code:
"Act as my launch QA lead. Spin up 5 subagents, each a different first-time user:
1. The impatient one: skims, clicks the first button, quits at the first error
2. The skeptic: reads pricing, terms and privacy before signing up
3. The mobile user: does everything on a 375px screen on slow 3G
4. The non-native English speaker: only follows what the UI literally says
5. The breaker: pastes junk into forms, hits back mid-flow, double-clicks everything
Each one opens the app in a real browser, goes from landing page to first success, and screenshots every moment they get confused, stuck or annoyed.
Merge everything into one list ranked by how many users hit it. Fix it all in one pass, then rerun the 5 users to prove it's fixed."
Your first 100 real users won't tell you why they left. these 5 will.
(Works best with a browser MCP connected, Playwright or Chrome DevTools)
mo.sh retweeted
I've been conducting some interviews for a backend engineer/founding engineer role, helping a friend with her new AI startup over the last couple of weeks.
Some of my observations in the post-AI world if you're preparing for an interview 🧵
mo.sh retweeted
taste is the skill ai can't shortcut. you can generate a hundred options in ten minutes now. picking the right one still takes years of pattern recognition.
mo.sh retweeted
Been going around talking to lot of old friends in Bangalore, many of whom are either engineering leaders trying to do "ai transformation" within their companies and a bunch of them doing consulting (either independently or have started up).
Few very interesting failure modes I am seeing in the transformation journey and why diffusion continues to remain slow across the industry
1. mid-senior identity crisis
"how can I merge without reading?"
"if the AI will do everything then what is my role?"
"everyone is pushing slop, if even I stop reviewing then it will all crash"
all good intentioned things, but most mid-senior engineers (4-8 yoe, usually 'tech leads' of smaller projects, care about craft, hold the engineering bar within their teams), are approaching it all too emotionally from a point of loss of identity, and it is preventing them from truly letting go and experimenting and finding the real 'frontier'
the frontier is where the limit of the AI capabilities are. you cannot find the frontier if you are too scared to go from cursor/copilot style programming to "jira-to-agent-to-automerge-PR" style systems. yes things WILL break! that's the point - find out where it breaks.
2. LLM vs agent
the scariest thing about an LLM is that it can still do (poorly/inefficiently) many tasks that deterministic systems are 10000x better suited to do.
for example "parse this json: {...}"
yes, sure if you send that to GPT/Claude, it can do a passable job as long as the json is small, the schema is small etc etc.
what a lot of 'using ai to solve' solutions are doing is dumping very random shit into an LLM, and in MVP/demo scale examples, it works, and as soon as the firehose of real data from a real world client hits the system, it shits its pants.
many "ai native" developers are not truly "agentic" in their thinking, they think they only tool at their disposal is the an ai sdk "generate" call (the openai API call). the fact that to get the best results you have to create a pipeline where there might be some cleaning/parsing steps first, then the LLM does the coginitive load part, and then again there is a post stage for more massaging of the data, calling other hooks etc is not there in their model of the solution.
3. sandboxes/code-mode is still not clicking
despite months of discourse on this topic - there is still little movement on this in many people's solution. especially if they starting building something before Feb/March 2026 era, it is all very CRUD-era model of software.
the backend makes LLM API calls, has a limited set of MCPs/tools and operates like a standard API server.
people are not seeing that for most non-trivial problems to be solved using LLMs, you need to throw the problem into a VM, and run the harness inside the VM itself.
many engineers have not worked in this model - spin up a VM which is like a "cooking area" where you just set guardrails for security, but otherwise, you do nothing - just let the bash-based agent rip, is not exactly standard way of building a service in most people's minds, and it is a hard switch to click for people
4. the exec/PM AI psychosis
lot's of EMs/PMs/execs and senior people who have not been coding hands on lately, are finding a new lease of life letting their Claude's rip.
one little issue is that, they have also not anytime lately been "accountable" for the fallout of code they have written or "responsible" for keeping that code running.
so for every brainfart of an idea they have, the most minor of pushback from an actual hands-on engineer, gets met with volatile reactions where they go into their caves with the Claudes, furiously prompt it to build the MVP, and come rushing back out shouting "see if I could make the MVP in 2 hours, why do you think you cannot build the prod version in 2 days?"
claude is only giving them the ability to generate tons and tons of code - something they had mostly forgotten having either never had done, or done far too long back. but claude's ability to generate tons of code, doesn't automatically give them back the ability to also become a good triager of bugs, responder of oncalls, architect of systems and refactorer of desings.
this creates further crises of confidence and loss of trust between the people who will actually respond/triage/refactor/own/maintain the system and the execs/PMs/EMs who think they know better
Yesterday me and my friends talked about the Dead Internet Theory
If nobody asks questions anymore on Stack Overflow, and sites like Reddit are now taken over by AI reply bots to promote brands, as well as AI reply bots on here, there is no real content anymore on the internet
And then there is no fresh training data anymore
I thought about something like, how would you find out the best outdoor action camera? Before I would search :
site:reddit.com best outdoor action camera
But now I just ask my AI which is the best
The problem is if nobody creates new content anymore and just asks their AI every question, the AI has nothing to train on anymore
And then I thought so what will happen? Will you get companies with giant warehouses that just buy stuff and review it with manually or with humanoid robots? Will you get humanoid robots backpacking in South East Asia to get life experience as training data? Or will we all train it by giving it access to our AI chats and user data?
I don't know but I think it's likely the web will dead in the future and AI companies will have to find training data elsewhere
mo.sh retweeted
Most people don’t use AI agents daily because delegation (to another human) is a learned skill.
Using AI agents is actually a lot like doing natural language programming: specifying requirements, verifying outputs, guiding the flow, giving context.
Also, using an AI agent requires skills similar to managing a junior employee, and most of the world simply isn’t ready or equipped to do so.
I myself built an EA team after a decade of being a founder, so this thought that arbitrary work can be delegated to someone doesn’t come naturally to us. Even if the thought comes, you have to justify the additional cognitive cost of delegation.
Like most decisions that humans make, it’s really a ROI decision on when to delegate
>>> Net delegation value = work avoided − discovery − briefing − supervision − recovery − perceived risk
In personal life, for most tasks, the benefits really don’t outweigh the costs. In coding and other professional contexts with clear and repeatable work, this tradeoff turns out to be worth making. So no wonder we’ve seen adoption skyrocket there.
In day to day life, we’re much better at reacting to what’s presented in front of us than specifying what we need upfront.
So, methinks AI agents will change the world by disappearing behind interfaces that people actually find cognitively simple to use.
All we want to do is tap, swipe and click.
mo.sh retweeted
If you wanna do it yourself, this is how:
Buy (~15 min)
1. Cheap VPS from Hetzner or DigitalOcean (~€5-10/mo), Ubuntu 24.04, tick automatic backups at checkout
2. Add your domain to Cloudflare (free plan), switch nameservers at your registrar
3. Install Termius (SSH app) + Tailscale (private network) on laptop and phone, free tiers
Lock it down (~20 min)
4. Generate an SSH key in Termius, add it to the VPS at creation. Keys only, never passwords
5. SSH in once via public IP, run updates, install Tailscale on the server, log it in
6. Disable Tailscale key expiry for the server (admin console, one click)
7. Verify you can SSH via the server's Tailscale 100.x address BEFORE the next step
8. Provider firewall: delete all inbound rules, allow only port 443 from Cloudflare's published IP ranges. No public SSH at all. You enter through the tunnel
9. Test from outside: public IP times out on everything, Tailscale IP connects. Server is now invisible
10. One SSH key per device. Phone gets its own key added to authorized_keys
Install the brain (~5 min)
11. apt install tmux then install Claude Code (official native installer, one curl command)
12. Run Claude Code inside a tmux session so it survives disconnects and keeps working while your laptop is closed
Hand over everything else
13. Write ONE long handover prompt telling Claude Code: the server facts, the security model (so it doesn't "fix" it), folder conventions (/srv/http/domain per project, one tmux session each), your preferences, and standing rules (confirm before destructive actions, new services bind to localhost/Tailscale only)
14. Make it write all of that into CLAUDE.md first, so every future session already knows everything
15. Backups before features: nightly job pushing your data to GitHub, tested, before a single page exists
16. Then let it install the web server (Caddy + Cloudflare DNS plugin plays nicest with the locked firewall), set up SQLite, deploy the first page
From then on you never administer the server again.
You open Termius from anywhere, on any device, and just say what you want.
BOSH
mo.sh retweeted
do this right now if you're using grok CLI.
I can't believe the default grok behavior was to upload your whole project (not just files AI is touching)
c'mon man, disappointing
mo.sh retweeted
Just telling people they slept poorly led to impaired cognitive function. Telling them they slept fine preserved it.
mo.sh retweeted
I’m reading a book that’s so depressing that it has made me happy.
Its called 4000 Weeks. 4000 weeks is roughly the average human life.
The premise of the book is:
1. We’ll all die any minute now.
2. Time efficiency hacks just make you more busy.
3. Accept you can do very few things in life and commit to only a few things.
The last thing on commitment, I think is the most important:
“And not only should you settle: ideally, you should settle in a way that makes it harder to back out, such as moving in together, or getting married, or having a child.
The great irony of all our efforts to avoid facing finitude - to carry on believing that it might be possible not to have to choose between mutually exclusive options - is that when people finally do choose, in a relatively irreversible way, they're usually much happier as a result.
We'll do almost anything to avoid burning our bridges, to keep alive the fantasy of a future unconstrained by limitation, yet having burned them, we're generally pleased that we did so.”
mo.sh retweeted
I think one of the most urgent meta-cognitive skills one can hone today is knowing when to be lazy and when not to be.
With AI, there is an ever-increasing pressure to be lazy with everything, but that comes with the risk of losing what’s important or meaningful.
mo.sh retweeted
Everyone keeps saying AI will replace programmers.
Honestly, it sounds very smart… till you actually ship software and live with it.
Yes, AI writes a lot of code now. I use it daily. Most teams do. That’s not the debate. The real thing people miss is that building software is not about making something work once.
The real work starts later.
Maintaining it. Changing it. Fixing things when something breaks at the worst possible time. And suddenly you’re stuck with a codebase that technically works, but nobody really understands.
That’s when you realise writing code is just 20–30% of the journey. The rest is judgment. Knowing what to build, what not to build, and when to say “this is a bad idea” even if it runs fine today.
AI is a powerful tool. No doubt.
But it doesn’t own consequences.
You still need engineers who understand the code and the business well enough to stop mistakes before they become expensive lessons.
Don't you think that we are overhyping speed and forgetting responsibility?




























