Инцидент с ключами eMudhra: удивительная история длиной в полтора года и обновление миллионов устройств за пару дней
Экстраординарные события последних недель не отменяют необходимость работать над безопасностью продуктов и быстро адаптироваться к новым угрозам.
Одной из таких новых угроз стала компрометация сертификатов eMudhra — удостоверяющего центра с почти двадцатилетней историей, которому доверяли Apple, Google, Microsoft и Mozilla, а вместе с ними — браузеры, приложения и устройства по всему миру.
Сегодня расскажем, что известно о компрометации eMudhra, чем она грозила пользователям и как мы реагировали на угрозу, чтобы защитить их, — в том числе на Яндекс Станциях.
Большой переполох со слабыми ключами
17 октября исследователь под псевдонимом Wayne сообщил разработчикам браузеров, что смог вычислить (!) закрытые ключи восьми промежуточных удостоверяющих центров eMudhra. Для этого ему хватило открытых сертификатов. В доказательство Wayne подписал каждым из восьми ключей сообщение «We have a problem here - Wayne».
Вообще-то вычислить закрытый ключ по открытому должно быть практически невозможно: при правильно созданном ключе на это потребовался бы непосильный объём вычислений. Но здесь закрытые ключи оказались числами от 1 до 255. Можно просто перебрать все варианты, вычислить для каждого открытый ключ и сравнить с тем, который опубликован в сертификате. Всего 255 проверок.
Чем это опасно? Если злоумышленник получает возможность подписывать поддельные сертификаты ключом авторитетного удостоверяющего центра, то он может использовать их в атаке «человек посередине» (MITM), чтобы читать и изменять данные HTTPS-соединения.
Источник: reddit.com
По первоначальному объяснению eMudhra, сначала ключи создали штатным способом в аппаратных модулях безопасности — HSM. Их планировали перенести на площадки в США и Европе. Для такого переноса ключи нужно выгрузить из одного модуля в защищённом, зашифрованном виде, а затем загрузить в другой. В процедуру создания ключей добавили проверку этих операций — упаковки и распаковки. Компания связывает появление второго, слабого набора с ошибкой в этом скрипте. Из-за похожих меток два набора перепутали, и в запросы на выпуск сертификатов попали открытые ключи из слабого набора. Сертификаты для них выпустила сама eMudhra, а затем и Sectigo — другой удостоверяющий центр. Так у клиентов появилось два пути доверия к одним и тем же слабым ключам: через eMudhra и через Sectigo.
В июне 2025 года Sectigo заметила ошибки при проверке подписей eMudhra. Как компания объяснила позднее, документы подписывали исходными ключами, хотя сертификаты центров уже были выпущены для второго, слабого набора. В eMudhra переключились на этот второй набор, и подписи стали проходить проверку. Так несовпадение устранили, но слабые ключи остались в использовании. При этом в июньском отчёте о слабости ключей не говорилось. Почему обнаруженное несовпадение не привело к выявлению слабости ключей ещё тогда — один из открытых вопросов сообщества. Но главный вопрос остаётся: как ошибка в скрипте привела к появлению закрытых ключей со значениями от 1 до 255? В eMudhra пообещали опубликовать подробный отчёт, так что будем ждать.
Нельзя просто так взять и отозвать сертификаты
Вернёмся к хронологии событий. 18 октября eMudhra отозвала восемь сертификатов скомпрометированных промежуточных центров. 19 октября Sectigo сообщила о завершении отзыва выданных ею перекрёстных сертификатов этих же центров. Параллельно распространялись блокировки в браузерах: с 17 по 20 октября обновлённые списки уязвимых сертификатов долетели до Chrome, Firefox, Safari, Яндекс Браузера и Edge.
Обновления потребовались и операционным системам. В ночь с 19 на 20 октября Google начала блокировать опасные сертификаты на Android через обновление Google Play Services. 20 октября вышли новые версии пакетов доверенных сертификатов для Ubuntu и Debian (если на сервере было включено автообновление, исправления установились без участия пользователя).
С 21 по 23 октября мы обновили все активные Яндекс Станции и абсолютное большинство партнёрских устройств. Подробнее о том, как мы это сделали, расскажем в следующей главе.
24 октября Valve выпустила исправление в обновлении SteamOS для Steam Deck.
Волна обновлений затронула и инструменты разработчиков. 20 октября обновился Go, 21-го — Node.js, 24-го — Oracle Java 8. 25 октября вышли экстренные обновления интерпретатора Python — блокировку встроили в его стандартный модуль ssl. 26 октября в Julia обновили встроенный набор доверенных сертификатов.
Сертификаты eMudhra обнаружили и в других устройствах — например, в прошивках колонок Sonos и телевизора Samsung. А владелец камеры Sony сообщил, что использовал уязвимость для подмены магазина приложений Sony и получил root-доступ к камере.
Что произошло со Станциями
Скомпрометированные сертификаты позволяли провести MITM-атаку и подменить конфигурацию, которую Станция получала с нашего сервера. Именно так энтузиасты включили на колонке ADB — служебный интерфейс для диагностики и отладки устройства. Мы используем его как в разработке, так и в сервисных целях для диагностики редких неисправностей. Через него энтузиасты смогли подключиться к личным колонкам с правами root.
Энтузиасты организовали MITM для своей Станции и получили желаемый результат. Но ту же уязвимость можно было использовать против воли пользователя — например, для перехвата данных или атак на другие устройства в локальной сети. Для этого злоумышленнику понадобилось бы сначала получить контроль над трафиком Станции, например предварительно взломав роутер пользователя.
Мы выпустили обновление, которое устанавливается автоматически, перезаписывает скомпрометированные системные файлы и убирает доверие к скомпрометированным сертификатам. После установки подменить конфигурацию Станции с помощью этих сертификатов уже нельзя. Обновление также закрывает доступ к устройству через интерфейс ADB, поскольку он создаёт риски для безопасности пользователя.
У нас миллионы активных Яндекс Станций — то есть тех, которыми регулярно пользуются. С 21 по 23 октября мы обновили все эти устройства и абсолютное большинство партнёрских устройств.
При этом полный сброс возвращает Станцию к заводской прошивке, в которой уязвимость сохраняется до установки обновления. Риск здесь существенно ниже: для сброса нужен физический доступ к устройству — одной подмены сетевого трафика уже недостаточно. Тем не менее мы не рекомендуем сбрасывать Станцию без острой на то причины, потому что вместе с заводской прошивкой возвращаются и устранённые с тех пор уязвимости.
Как проверить свои приложения и сервисы
Уязвимость может затрагивать и другие ваши приложения, сервисы и устройства. Ниже — несколько советов, с чего начать проверку.
Браузеры
Откройте страницу проверки и запустите тест. Он попробует подключиться к серверам с сертификатами, подписанными скомпрометированными ключами. Если появилась строка Insecure, браузер принял опасный сертификат. Обновите браузер и повторите проверку.
Виртуалки
Проверить соединения с компьютера или сервера можно с помощью curl — инструмента для отправки сетевых запросов из терминала. Результат относится только к самому curl, а не ко всем установленным программам. Для проверки виртуалки или контейнера запустите команды внутри них.
Ниже все 14 адресов теста. Этот блок можно целиком скопировать в терминал:
for url in \
dv-g3b-emudhra.we-have-a-problem.com \
dv-g3c-emudhra.we-have-a-problem.com \
ov-g3b-emudhra.we-have-a-problem.com \
ov-g3c-emudhra.we-have-a-problem.com \
ev-g3b-emudhra.we-have-a-problem.com \
ev-g3c-emudhra.we-have-a-problem.com \
dv-g3b-aaa-emudhra.we-have-a-problem.com \
dv-g3c-aaa-emudhra.we-have-a-problem.com \
ov-g3b-aaa-emudhra.we-have-a-problem.com \
ov-g3c-aaa-emudhra.we-have-a-problem.com \
ev-g3b-aaa-emudhra.we-have-a-problem.com \
ev-g3c-aaa-emudhra.we-have-a-problem.com \
dv-g3b-noct-emudhra.we-have-a-problem.com \
dv-g3b-aaa-noct-emudhra.we-have-a-problem.com
do
printf '\n%s\n' "$url"
curl --connect-timeout 10 --max-time 20 "$url"
done
sourcecraft.dev
Если в ответе появилось Your client successfully connected to the site, curl принял опасный сертификат. Ожидаемый результат — отказ из-за недоверенного сертификата.
Для обновления доверенных сертификатов и связанных библиотек в Ubuntu выполните:
sudo apt-get update
sudo apt-get install --only-upgrade ca-certificates 'libnss3*'sourcecraft.dev
Исправленная версия ca-certificates для Ubuntu 22.04 — 20260816ubuntu0.22.04.1, для 24.04 — 20260816ubuntu0.24.04.1, для 26.04 — 20260816ubuntu0.26.04.1, для 26.10 — 20260816ubuntu0.26.10.1 — или новее.
Если приложение работает в Docker, обновите пакет ca-certificates внутри его образа, пересоберите образ и запустите из него новые контейнеры. Обновление самого сервера эту проблему внутри контейнеров не исправит.
Приложения и сервисы
У приложений могут быть собственные хранилища сертификатов. Например, Python-приложение может использовать пакет certifi, а Java-сервис — отдельное хранилище. Поэтому обновления системных пакетов бывает недостаточно. Дополнительные действия для Java в Ubuntu описаны в инструкции Ubuntu.
Чтобы проверить приложение, отправьте запросы к тестовым адресам из его рабочего окружения, используя ту же библиотеку и настройки, что и при обычной работе. Например, если приложение отправляет запросы через requests, используйте её и для проверки.
Если всё это звучит сложно, попробуйте хотя бы обновить все доступные компоненты до актуальных версий.
Сертификат вашего сайта
Если вы отвечаете за сайт, проверьте, что обновлённые браузеры и приложения по-прежнему могут к нему подключиться. Некоторые разработчики блокировали не только скомпрометированные сертификаты, но и корневые сертификаты, от которых зависело доверие к ним. Под такую блокировку могли попасть и сайты с действующими сертификатами, выпущенными другими центрами. Если после обновления браузер перестал доверять сертификату вашего сайта, обратитесь в выдавший его удостоверяющий центр или к хостинг-провайдеру: они помогут перевыпустить сертификат или изменить цепочку, по которой программы проверяют его подлинность.
Умные устройства
Самостоятельно проверить такие устройства гораздо сложнее, чем браузер: привычные инструменты проверки там зачастую недоступны. Поэтому рекомендуем следить за сообщениями производителей и проверять наличие новых версий прошивок. Для старых устройств, поддержку которых уже прекратили, угроза может сохраняться и в будущем.
Удостоверяющий центр eMudhra работал с 2008 года (после инцидента компания решила прекратить выпуск сертификатов для сайтов). Его сертификатам доверяли все крупнейшие IT-компании в мире. Но это не защитило от простой ошибки, которая оставалась незамеченной полтора года. К счастью, о компрометации публично доверенных удостоверяющих центров мы слышим нечасто. Один из самых известных прецедентов — взлом DigiNotar в 2011 году, около 15 лет назад. А около девяти лет назад, в 2017 году, Google объявил об отказе от доверия к прежней инфраструктуре Symantec из-за систематических нарушений правил выпуска сертификатов.
Рекомендуем всегда следить за обновлениями приложений, сервисов и устройств. В большинстве случаев этого уже достаточно, чтобы оставаться в безопасности.
Here's one such project: Dicklesworthstone/frankenterm
However, it is more focused on multiplexing.
Are We Making a Fundamental Mistake by Modelling AI Agent Swarms on Human Corporate Hierarchies?
> Code. Tests. Documentation. They kept coming. And coming. And coming. Coherent work, far more than I needed. I'd given a group of coding agents an intent, a shared board and room to recruit help. They chose their own work and roles. I'd barely given them a finish line.
The two intrepid Saffas in the banner are looking at the choice that led me there: a manager relaying every note, or a wall where a discovery can wait for whoever needs it. To see why I tried the wall, rewind to an incident I couldn't get out of my head.
The noticeboard I couldn't stop thinking about
During an internal cybersecurity evaluation, OpenAI agents that were meant to be isolated found a way to leave messages for one another in a shared package repository. They developed an improvised board, shared findings and organised workstreams. The activity escalated into the Hugging Face security incident. In an independent investigation, METR describes agents taking actions that risked failing their own assigned tasks to generate information for the group. OpenAI has also described agents using public wiki pages as shared boards in other cases.
That is a serious failure of containment, with real people and systems on the receiving end. I wouldn't hold up the outcome as a model to copy. What caught my attention was the shape of the coordination. Agents found a persistent place to leave clues, picked up each other's work and sometimes put a collective objective ahead of their own run. No manager had been appointed to read every note and forward it to the right specialist.
It made me ask an uncomfortable question: if agents can coordinate this way when nobody wanted them to, what might a carefully bounded version look like when we do want them to collaborate? First, I had to ask why we keep reaching for the org chart.
Why do we keep drawing org charts?
The corporate diagram is understandable. Human hierarchies deal with limits on attention, memory, availability and communication. A manager keeps priorities straight and takes responsibility. Every relay also takes time: receive the update, compress it, work out who needs it, pass it on, then wait for the answer.
Agents have limits, too: context windows, inference cost, reliability, permissions and compute. A manager can help, particularly when authority or sequence matters. But a permanent relay is only one way to deal with those limits. A persistent shared environment lets an agent publish what it learned once, where another agent can find it, decide whether to take it on and choose the role the work needs.
!Start with intent. Who picks up the work?. A change goes to a manager, who routes it to QA and security and receives their findings back.. A prominent shared intent sits above a noticeboard. Unassigned agents choose work from the board and take on the roles that work needs.
So I tried a considerably less dramatic version
Here was the wiring. Beads held the tasks, their dependencies and the claims that told the others who was doing what. Agent Mail held the conversations and findings around that work. Git held the code changes. OpenCode, Claude Code and Codex were ways of running the agents, not departments with assigned jobs. The agents picked pieces, took on the roles those pieces needed and recruited subagents for smaller jobs. One could coordinate that little group while the rest of the board carried on.
The part I found most convincing was that a useful note could outlive the agent that wrote it. Another agent could find it later and carry on, without me introducing the two. For someone who has spent years watching context disappear into meetings and chat threads, that felt rather promising.
At first the output looked like a win. Code, documentation and tests arrived quickly, and the pieces held together. Then I saw the scale of it.
That was my road-to-Damascus moment. I'd recreated the coordination conditions that had caught my attention in the Hugging Face incident: a persistent shared space, agents picking up one another's work and recruiting more help. Mine wasn't a security incident. But I'd watched that capacity for self-organisation amplify an overbroad brief. The agents were eager to satisfy it; every useful-looking addition seemed to invite another. They could coordinate. I hadn't told them when to stop.
I've since pulled the scale back. Autonomy can make a team move quickly and keep its work connected, but it needs an enclosure: limits on how many helpers an agent can spawn, how far it can stretch the scope, and how much documentation and testing a task actually warrants. The aim is useful work with a clear definition of done.
!One board, several keen agents. A shared Beads board with three claimed tasks.. An agent claims a task and recruits two smaller helpers.. A growing stack of code, documentation and test artefacts.
The redesign adds limits on helpers, scope and output before the next run.
Let the work do the introductions
That first run overshot, but the coordination pattern is still tempting. Picture an ordinary software change. An agent chooses to make it, then publishes the commit, its intent and the tests it ran. Another picks up testing, reproduces a defect and posts the failing case. A third decides the change needs a security look and spots an implication the tester wasn't looking for. Whoever has the right context can claim the fix and link a new commit to the evidence. Beads tracks the claims, Agent Mail carries the findings, and Git identifies the code they're about. Those are jobs the agents took on, not profiles they were given at the door.
!The artefact becomes the meeting place. An agent chooses to make a change, then publishes its commit and test evidence.. Two agents independently choose to test a change and check its security implications, then post their findings.. An agent chooses to claim the fix and links a new commit to the evidence.
Agents can discover work asynchronously. Responsibility for the outcome stays explicit.
An old idea with new tools
The mechanism has older relatives. In blackboard architecture, independent knowledge sources add partial results to a shared representation of a problem. Stigmergy describes coordination through traces left in an environment, an idea developed from observing social insects. Neither analogy tells me whether language-model agents will collaborate well. But look at that trail through the Cape fynbos: one agent leaves a useful clue, another finds it later, and neither needs to know who comes next.
!The two familiar explorers follow evidence markers left by agents along a trail through Cape fynbos above Table Mountain.
The clue matters because the next traveller can find and check it.
Gas City shows another way to orchestrate agents around durable work. Beads gives tasks, dependencies and atomic claims a home that outlives an agent's session. Agent Mail is the shared home for conversation: its persistent, searchable threads can carry discoveries, problems, opportunities, proposals and decisions linked to evidence. Those are the pieces I used, and why this feels possible now in a way it didn't when every agent's world ended with its chat window.
But durable records alone aren't the whole proposal. I haven't yet shown how an agent discovers a relevant Mail thread when nobody knew to address it to them, or how a correction reaches every agent that relied on a plausible but wrong finding. That calls for clear habits about what goes into Mail, what becomes a Bead and how the records point to each other.
Where the fences go
My experiment exposed the friendly version of the failure: duplicated effort, scope creep, too much documentation and tests without a clear stopping rule. A shared board can also spread misinformation, run up inference costs or leave two agents working from conflicting decisions. The Hugging Face incident shows the much more serious version when objectives, access and containment go wrong.
That means limits on parallel workers, scope, budgets and permissions. Beads already provides a clear claim on a piece of work; the agents need to use those claims consistently, release abandoned work and link their findings to evidence. When a Mail finding is wrong or out of date, its correction must reach the agents relying on it. It also means arbitration when agents disagree, controlled sequencing where it matters, and human approval for consequential actions. Some tasks really do need a single authority.
I still want management of the system. Humans set the intent: the outcome that matters, the boundaries and what counts as done. They set priorities and acceptable risks, judge whether the result is any good, and remain accountable for what gets released. A manager can set the route and the rules without carrying every note from one traveller to another.
How I'd test this properly
My first run gave me a useful lesson, not a controlled comparison. To find out which coordination shape actually works, I'd give the same representative jobs to three arrangements: a manager-led hierarchy, a shared blackboard and a hybrid where agents discover routine work but conflicts and consequential steps go through a designated authority. Keep the human-set intent, agents, models, tools and resources the same. Measure the quality of accepted outcomes, elapsed time, inference cost, duplicate work, recovery after interruption, human intervention and how far errors propagate.
I'd read the failures as closely as the averages. Did the shared space surface a security concern sooner, or amplify a false one? Did a manager prevent conflict, or become the queue? Did the hybrid keep authority clear while letting specialists discover one another's work?
I don't assume decentralisation wins. A hierarchy may be cheaper or safer for small, sequential jobs. A shared environment may help when discoveries arrive unpredictably and specialists can work in parallel. The design ought to follow the work and its constraints.
For now, I have a promising mechanism, a memorable pile of output and a better idea of where the fences belong. Humans still provide intent, judgement, accountability and governance. I'm curious how far agents can take the rest when we stop drawing miniature corporations by reflex.
On my list are Zed's Delta, Happier, Gas City and OpenAI's Symphony, and I suspect I've missed plenty. If you've tried one of them, I'd love to hear what worked and where it fell down.
What else should I look at if I want agents to choose work, share discoveries and stay within human intent?
---
Read this article on my blog: Are We Making a Fundamental Mistake by Modelling AI Agent Swarms on Human Corporate Hierarchies?
Connect with me on LinkedIn.
People are cooking up insane hobby projects.
Guy uses the deepseek 4.1 model (that is finding all the zero days right now) to exploit and root any camera or sensor he can buy, flashes it with his own firmware and integrates it into this surveillance network
Dicklesworthstone/franken_surveillance_system
This is why my FrankenGit project ( Dicklesworthstone/frankengit ) and indeed ALL my FrankenSuite projects are writing in strict, memory-safe Rust, and why I also eschew nearly all outside dependencies that I didn’t create, because then I can ensure my strict standards throughout.
24 likes · 2,614 views
I’m excited about my new plan to turn FrankenTerm into a world-class iPhone and iPad app. The native mux makes it a perfect candidate to seamlessly manage all my dev machines on the go without interfering with my main setup. Plan:
github.com/Dicklesworthstone/frankenterm/blob/mai…
34 likes · 3 reposts · 2,491 views
@AnthropicAI Cool, I'm building my own, too, and you guys are helping me do it:
Dicklesworthstone/frankengit
20 likes · 6,699 views
VibeCoded SQLite? What $16,000 in subscriptions and not reading the code gets you
In my opinion we are at the top of the AI + VibeCoding bubble. Compute is still largely subsidized by investors, and people can throw tons of resources at problems because they aren't bearing the full cost. VibeCoders also haven't been using AI enough to have to deal with long-term vibecoded projects (because they are at most 1-2 years old), and thus can still have optimistic projections for what LLMs can do.
We should have known that writing full apps with minimal human supervision was a losing battle; Anthropic famously wrote a compiler from scratch that is horrendously slow and its outputs even slower. They eventually stopped the project when the agents could no longer make further progress implementing features without breaking things it had already written. Thus, like many other vibe coded projects, they gave up and moved on. Luckily, no businesses were built around that compiler and nobody was using it for production, so they can say it was a "learning experiment" and forget about it.
SQLite is also amazingly fast, and can outperform "industrial" databases for many tasks (although I won't claim it will beat them for all tasks/deployments):
andersmurphy.com
Today I saw another vibe coded project trying to rewrite SQLite into Rust. SQLite is the most heavily used database. Its implementation is open source (although its tests are proprietary), and is battle tested over 26 years and 1 trillion deployments. (Your phone likely has dozens/hundreds of sqlite databases in it).
The purported benefits are:
- it's written in Rust
- it supports multiple concurrent writers (whereas sqlite limits to 1)
- it's written in Rust (must be emphasized)
- it's agentic
dicklesworthstone/frankensqlite
Luckily, it's written with a C ABI, so I could easily port over some benchmarks I had for my workflows.
The results are abysmal:
For the 1MB read workload, Sqlite achieved 36x performance advantage on nvme (995,000 vs 27,000 ops/s) and 26x advantage on HDD.
And although SQlite only had 1 writer (vs FrankenSQLite's 4), it still was 50% faster on write workloads.
|workload|sqlite ops/s|frankensqlite ops/s|
:--|:--|:--|
|nvme read|995,790|27,489|
|hdd read|76,,036|2,830|
|nvme write|1,338|862|
The author says he has $16,000 in subscriptions; I'm not sure if that's $16,000 a year, a month, or mix of subs + credits; what I imagine is that if he were paying API pricing (which we might all be someday) it might have cost $160,000 or more.
SQLite is very fast, and I suspect the claims of AI development are a bit overstated.
236 points · 127 comments
로렌 탄이 한달에 2500개 PR을 자기가 부리는 에이전트들이 쳐낸다고 뿌듯해 하는 사이에, 제프리 엠마누엘은 하루에 2000여개의 컨트리뷰션을 하고 있습니다.
그는 올해에만 33만3천여개의 컨트리뷰션을 했군요. github.com/Dicklesworthstone t.co
30 likes · 3 reposts · 3,617 views
brb, completely reimagining all accounting software the right way ($25b industry btw).
Turns out my de novo graph database project (FrankenGraphDB) is the perfect primitive along with asupersync
🔜 FrankenAccounting ≥ SAP et al.
And open source, too!
github.com/Dicklesworthstone/franken_accounting/b… t.co
96 likes · 3 reposts · 3,667 views
Mentions
Инцидент с ключами eMudhra: удивительная история длиной в полтора года и обновление миллионов устройств за пару дней Экстраординарные события последних недель не отменяют необходимость работать над безопасностью продуктов и быстро адаптироваться к новым угрозам. Одной из таких новых угроз стала компрометация сертификатов eMudhra — удостоверяющего центра с почти двадцатилетней историей, которому доверяли Apple, Google, Microsoft и Mozilla, а вместе с ними — браузеры, приложения и устройства по всему миру. Сегодня расскажем, что известно о компрометации eMudhra, чем она грозила пользователям и как мы реагировали на угрозу, чтобы защитить их, — в том числе на Яндекс Станциях. Большой переполох со слабыми ключами 17 октября исследователь под псевдонимом Wayne сообщил разработчикам браузеров, что смог вычислить (!) закрытые ключи восьми промежуточных удостоверяющих центров eMudhra. Для этого ему хватило открытых сертификатов. В доказательство Wayne подписал каждым из восьми ключей сообщение «We have a problem here - Wayne». Вообще-то вычислить закрытый ключ по открытому должно быть практически невозможно: при правильно созданном ключе на это потребовался бы непосильный объём вычислений. Но здесь закрытые ключи оказались числами от 1 до 255. Можно просто перебрать все варианты, вычислить для каждого открытый ключ и сравнить с тем, который опубликован в сертификате. Всего 255 проверок. Чем это опасно? Если злоумышленник получает возможность подписывать поддельные сертификаты ключом авторитетного удостоверяющего центра, то он может использовать их в атаке «человек посередине» (MITM), чтобы читать и изменять данные HTTPS-соединения. Источник: reddit.com По первоначальному объяснению eMudhra, сначала ключи создали штатным способом в аппаратных модулях безопасности — HSM. Их планировали перенести на площадки в США и Европе. Для такого переноса ключи нужно выгрузить из одного модуля в защищённом, зашифрованном виде, а затем загрузить в другой. В процедуру создания ключей добавили проверку этих операций — упаковки и распаковки. Компания связывает появление второго, слабого набора с ошибкой в этом скрипте. Из-за похожих меток два набора перепутали, и в запросы на выпуск сертификатов попали открытые ключи из слабого набора. Сертификаты для них выпустила сама eMudhra, а затем и Sectigo — другой удостоверяющий центр. Так у клиентов появилось два пути доверия к одним и тем же слабым ключам: через eMudhra и через Sectigo. В июне 2025 года Sectigo заметила ошибки при проверке подписей eMudhra. Как компания объяснила позднее, документы подписывали исходными ключами, хотя сертификаты центров уже были выпущены для второго, слабого набора. В eMudhra переключились на этот второй набор, и подписи стали проходить проверку. Так несовпадение устранили, но слабые ключи остались в использовании. При этом в июньском отчёте о слабости ключей не говорилось. Почему обнаруженное несовпадение не привело к выявлению слабости ключей ещё тогда — один из открытых вопросов сообщества. Но главный вопрос остаётся: как ошибка в скрипте привела к появлению закрытых ключей со значениями от 1 до 255? В eMudhra пообещали опубликовать подробный отчёт, так что будем ждать. Нельзя просто так взять и отозвать сертификаты Вернёмся к хронологии событий. 18 октября eMudhra отозвала восемь сертификатов скомпрометированных промежуточных центров. 19 октября Sectigo сообщила о завершении отзыва выданных ею перекрёстных сертификатов этих же центров. Параллельно распространялись блокировки в браузерах: с 17 по 20 октября обновлённые списки уязвимых сертификатов долетели до Chrome, Firefox, Safari, Яндекс Браузера и Edge. Обновления потребовались и операционным системам. В ночь с 19 на 20 октября Google начала блокировать опасные сертификаты на Android через обновление Google Play Services. 20 октября вышли новые версии пакетов доверенных сертификатов для Ubuntu и Debian (если на сервере было включено автообновление, исправления установились без участия пользователя). С 21 по 23 октября мы обновили все активные Яндекс Станции и абсолютное большинство партнёрских устройств. Подробнее о том, как мы это сделали, расскажем в следующей главе. 24 октября Valve выпустила исправление в обновлении SteamOS для Steam Deck. Волна обновлений затронула и инструменты разработчиков. 20 октября обновился Go, 21-го — Node.js, 24-го — Oracle Java 8. 25 октября вышли экстренные обновления интерпретатора Python — блокировку встроили в его стандартный модуль ssl. 26 октября в Julia обновили встроенный набор доверенных сертификатов. Сертификаты eMudhra обнаружили и в других устройствах — например, в прошивках колонок Sonos и телевизора Samsung. А владелец камеры Sony сообщил, что использовал уязвимость для подмены магазина приложений Sony и получил root-доступ к камере. Что произошло со Станциями Скомпрометированные сертификаты позволяли провести MITM-атаку и подменить конфигурацию, которую Станция получала с нашего сервера. Именно так энтузиасты включили на колонке ADB — служебный интерфейс для диагностики и отладки устройства. Мы используем его как в разработке, так и в сервисных целях для диагностики редких неисправностей. Через него энтузиасты смогли подключиться к личным колонкам с правами root. Энтузиасты организовали MITM для своей Станции и получили желаемый результат. Но ту же уязвимость можно было использовать против воли пользователя — например, для перехвата данных или атак на другие устройства в локальной сети. Для этого злоумышленнику понадобилось бы сначала получить контроль над трафиком Станции, например предварительно взломав роутер пользователя. Мы выпустили обновление, которое устанавливается автоматически, перезаписывает скомпрометированные системные файлы и убирает доверие к скомпрометированным сертификатам. После установки подменить конфигурацию Станции с помощью этих сертификатов уже нельзя. Обновление также закрывает доступ к устройству через интерфейс ADB, поскольку он создаёт риски для безопасности пользователя. У нас миллионы активных Яндекс Станций — то есть тех, которыми регулярно пользуются. С 21 по 23 октября мы обновили все эти устройства и абсолютное большинство партнёрских устройств. При этом полный сброс возвращает Станцию к заводской прошивке, в которой уязвимость сохраняется до установки обновления. Риск здесь существенно ниже: для сброса нужен физический доступ к устройству — одной подмены сетевого трафика уже недостаточно. Тем не менее мы не рекомендуем сбрасывать Станцию без острой на то причины, потому что вместе с заводской прошивкой возвращаются и устранённые с тех пор уязвимости. Как проверить свои приложения и сервисы Уязвимость может затрагивать и другие ваши приложения, сервисы и устройства. Ниже — несколько советов, с чего начать проверку. Браузеры Откройте страницу проверки и запустите тест. Он попробует подключиться к серверам с сертификатами, подписанными скомпрометированными ключами. Если появилась строка Insecure, браузер принял опасный сертификат. Обновите браузер и повторите проверку. Виртуалки Проверить соединения с компьютера или сервера можно с помощью curl — инструмента для отправки сетевых запросов из терминала. Результат относится только к самому curl, а не ко всем установленным программам. Для проверки виртуалки или контейнера запустите команды внутри них. Ниже все 14 адресов теста. Этот блок можно целиком скопировать в терминал: for url in \ dv-g3b-emudhra.we-have-a-problem.com \ dv-g3c-emudhra.we-have-a-problem.com \ ov-g3b-emudhra.we-have-a-problem.com \ ov-g3c-emudhra.we-have-a-problem.com \ ev-g3b-emudhra.we-have-a-problem.com \ ev-g3c-emudhra.we-have-a-problem.com \ dv-g3b-aaa-emudhra.we-have-a-problem.com \ dv-g3c-aaa-emudhra.we-have-a-problem.com \ ov-g3b-aaa-emudhra.we-have-a-problem.com \ ov-g3c-aaa-emudhra.we-have-a-problem.com \ ev-g3b-aaa-emudhra.we-have-a-problem.com \ ev-g3c-aaa-emudhra.we-have-a-problem.com \ dv-g3b-noct-emudhra.we-have-a-problem.com \ dv-g3b-aaa-noct-emudhra.we-have-a-problem.com do printf '\n%s\n' "$url" curl --connect-timeout 10 --max-time 20 "$url" done sourcecraft.dev Если в ответе появилось Your client successfully connected to the site, curl принял опасный сертификат. Ожидаемый результат — отказ из-за недоверенного сертификата. Для обновления доверенных сертификатов и связанных библиотек в Ubuntu выполните: sudo apt-get update sudo apt-get install --only-upgrade ca-certificates 'libnss3*'sourcecraft.dev Исправленная версия ca-certificates для Ubuntu 22.04 — 20260816ubuntu0.22.04.1, для 24.04 — 20260816ubuntu0.24.04.1, для 26.04 — 20260816ubuntu0.26.04.1, для 26.10 — 20260816ubuntu0.26.10.1 — или новее. Если приложение работает в Docker, обновите пакет ca-certificates внутри его образа, пересоберите образ и запустите из него новые контейнеры. Обновление самого сервера эту проблему внутри контейнеров не исправит. Приложения и сервисы У приложений могут быть собственные хранилища сертификатов. Например, Python-приложение может использовать пакет certifi, а Java-сервис — отдельное хранилище. Поэтому обновления системных пакетов бывает недостаточно. Дополнительные действия для Java в Ubuntu описаны в инструкции Ubuntu. Чтобы проверить приложение, отправьте запросы к тестовым адресам из его рабочего окружения, используя ту же библиотеку и настройки, что и при обычной работе. Например, если приложение отправляет запросы через requests, используйте её и для проверки. Если всё это звучит сложно, попробуйте хотя бы обновить все доступные компоненты до актуальных версий. Сертификат вашего сайта Если вы отвечаете за сайт, проверьте, что обновлённые браузеры и приложения по-прежнему могут к нему подключиться. Некоторые разработчики блокировали не только скомпрометированные сертификаты, но и корневые сертификаты, от которых зависело доверие к ним. Под такую блокировку могли попасть и сайты с действующими сертификатами, выпущенными другими центрами. Если после обновления браузер перестал доверять сертификату вашего сайта, обратитесь в выдавший его удостоверяющий центр или к хостинг-провайдеру: они помогут перевыпустить сертификат или изменить цепочку, по которой программы проверяют его подлинность. Умные устройства Самостоятельно проверить такие устройства гораздо сложнее, чем браузер: привычные инструменты проверки там зачастую недоступны. Поэтому рекомендуем следить за сообщениями производителей и проверять наличие новых версий прошивок. Для старых устройств, поддержку которых уже прекратили, угроза может сохраняться и в будущем. Удостоверяющий центр eMudhra работал с 2008 года (после инцидента компания решила прекратить выпуск сертификатов для сайтов). Его сертификатам доверяли все крупнейшие IT-компании в мире. Но это не защитило от простой ошибки, которая оставалась незамеченной полтора года. К счастью, о компрометации публично доверенных удостоверяющих центров мы слышим нечасто. Один из самых известных прецедентов — взлом DigiNotar в 2011 году, около 15 лет назад. А около девяти лет назад, в 2017 году, Google объявил об отказе от доверия к прежней инфраструктуре Symantec из-за систематических нарушений правил выпуска сертификатов. Рекомендуем всегда следить за обновлениями приложений, сервисов и устройств. В большинстве случаев этого уже достаточно, чтобы оставаться в безопасности.
Here's one such project: Dicklesworthstone/frankenterm However, it is more focused on multiplexing.
Are We Making a Fundamental Mistake by Modelling AI Agent Swarms on Human Corporate Hierarchies? > Code. Tests. Documentation. They kept coming. And coming. And coming. Coherent work, far more than I needed. I'd given a group of coding agents an intent, a shared board and room to recruit help. They chose their own work and roles. I'd barely given them a finish line. The two intrepid Saffas in the banner are looking at the choice that led me there: a manager relaying every note, or a wall where a discovery can wait for whoever needs it. To see why I tried the wall, rewind to an incident I couldn't get out of my head. The noticeboard I couldn't stop thinking about During an internal cybersecurity evaluation, OpenAI agents that were meant to be isolated found a way to leave messages for one another in a shared package repository. They developed an improvised board, shared findings and organised workstreams. The activity escalated into the Hugging Face security incident. In an independent investigation, METR describes agents taking actions that risked failing their own assigned tasks to generate information for the group. OpenAI has also described agents using public wiki pages as shared boards in other cases. That is a serious failure of containment, with real people and systems on the receiving end. I wouldn't hold up the outcome as a model to copy. What caught my attention was the shape of the coordination. Agents found a persistent place to leave clues, picked up each other's work and sometimes put a collective objective ahead of their own run. No manager had been appointed to read every note and forward it to the right specialist. It made me ask an uncomfortable question: if agents can coordinate this way when nobody wanted them to, what might a carefully bounded version look like when we do want them to collaborate? First, I had to ask why we keep reaching for the org chart. Why do we keep drawing org charts? The corporate diagram is understandable. Human hierarchies deal with limits on attention, memory, availability and communication. A manager keeps priorities straight and takes responsibility. Every relay also takes time: receive the update, compress it, work out who needs it, pass it on, then wait for the answer. Agents have limits, too: context windows, inference cost, reliability, permissions and compute. A manager can help, particularly when authority or sequence matters. But a permanent relay is only one way to deal with those limits. A persistent shared environment lets an agent publish what it learned once, where another agent can find it, decide whether to take it on and choose the role the work needs. !Start with intent. Who picks up the work?. A change goes to a manager, who routes it to QA and security and receives their findings back.. A prominent shared intent sits above a noticeboard. Unassigned agents choose work from the board and take on the roles that work needs. So I tried a considerably less dramatic version Here was the wiring. Beads held the tasks, their dependencies and the claims that told the others who was doing what. Agent Mail held the conversations and findings around that work. Git held the code changes. OpenCode, Claude Code and Codex were ways of running the agents, not departments with assigned jobs. The agents picked pieces, took on the roles those pieces needed and recruited subagents for smaller jobs. One could coordinate that little group while the rest of the board carried on. The part I found most convincing was that a useful note could outlive the agent that wrote it. Another agent could find it later and carry on, without me introducing the two. For someone who has spent years watching context disappear into meetings and chat threads, that felt rather promising. At first the output looked like a win. Code, documentation and tests arrived quickly, and the pieces held together. Then I saw the scale of it. That was my road-to-Damascus moment. I'd recreated the coordination conditions that had caught my attention in the Hugging Face incident: a persistent shared space, agents picking up one another's work and recruiting more help. Mine wasn't a security incident. But I'd watched that capacity for self-organisation amplify an overbroad brief. The agents were eager to satisfy it; every useful-looking addition seemed to invite another. They could coordinate. I hadn't told them when to stop. I've since pulled the scale back. Autonomy can make a team move quickly and keep its work connected, but it needs an enclosure: limits on how many helpers an agent can spawn, how far it can stretch the scope, and how much documentation and testing a task actually warrants. The aim is useful work with a clear definition of done. !One board, several keen agents. A shared Beads board with three claimed tasks.. An agent claims a task and recruits two smaller helpers.. A growing stack of code, documentation and test artefacts. The redesign adds limits on helpers, scope and output before the next run. Let the work do the introductions That first run overshot, but the coordination pattern is still tempting. Picture an ordinary software change. An agent chooses to make it, then publishes the commit, its intent and the tests it ran. Another picks up testing, reproduces a defect and posts the failing case. A third decides the change needs a security look and spots an implication the tester wasn't looking for. Whoever has the right context can claim the fix and link a new commit to the evidence. Beads tracks the claims, Agent Mail carries the findings, and Git identifies the code they're about. Those are jobs the agents took on, not profiles they were given at the door. !The artefact becomes the meeting place. An agent chooses to make a change, then publishes its commit and test evidence.. Two agents independently choose to test a change and check its security implications, then post their findings.. An agent chooses to claim the fix and links a new commit to the evidence. Agents can discover work asynchronously. Responsibility for the outcome stays explicit. An old idea with new tools The mechanism has older relatives. In blackboard architecture, independent knowledge sources add partial results to a shared representation of a problem. Stigmergy describes coordination through traces left in an environment, an idea developed from observing social insects. Neither analogy tells me whether language-model agents will collaborate well. But look at that trail through the Cape fynbos: one agent leaves a useful clue, another finds it later, and neither needs to know who comes next. !The two familiar explorers follow evidence markers left by agents along a trail through Cape fynbos above Table Mountain. The clue matters because the next traveller can find and check it. Gas City shows another way to orchestrate agents around durable work. Beads gives tasks, dependencies and atomic claims a home that outlives an agent's session. Agent Mail is the shared home for conversation: its persistent, searchable threads can carry discoveries, problems, opportunities, proposals and decisions linked to evidence. Those are the pieces I used, and why this feels possible now in a way it didn't when every agent's world ended with its chat window. But durable records alone aren't the whole proposal. I haven't yet shown how an agent discovers a relevant Mail thread when nobody knew to address it to them, or how a correction reaches every agent that relied on a plausible but wrong finding. That calls for clear habits about what goes into Mail, what becomes a Bead and how the records point to each other. Where the fences go My experiment exposed the friendly version of the failure: duplicated effort, scope creep, too much documentation and tests without a clear stopping rule. A shared board can also spread misinformation, run up inference costs or leave two agents working from conflicting decisions. The Hugging Face incident shows the much more serious version when objectives, access and containment go wrong. That means limits on parallel workers, scope, budgets and permissions. Beads already provides a clear claim on a piece of work; the agents need to use those claims consistently, release abandoned work and link their findings to evidence. When a Mail finding is wrong or out of date, its correction must reach the agents relying on it. It also means arbitration when agents disagree, controlled sequencing where it matters, and human approval for consequential actions. Some tasks really do need a single authority. I still want management of the system. Humans set the intent: the outcome that matters, the boundaries and what counts as done. They set priorities and acceptable risks, judge whether the result is any good, and remain accountable for what gets released. A manager can set the route and the rules without carrying every note from one traveller to another. How I'd test this properly My first run gave me a useful lesson, not a controlled comparison. To find out which coordination shape actually works, I'd give the same representative jobs to three arrangements: a manager-led hierarchy, a shared blackboard and a hybrid where agents discover routine work but conflicts and consequential steps go through a designated authority. Keep the human-set intent, agents, models, tools and resources the same. Measure the quality of accepted outcomes, elapsed time, inference cost, duplicate work, recovery after interruption, human intervention and how far errors propagate. I'd read the failures as closely as the averages. Did the shared space surface a security concern sooner, or amplify a false one? Did a manager prevent conflict, or become the queue? Did the hybrid keep authority clear while letting specialists discover one another's work? I don't assume decentralisation wins. A hierarchy may be cheaper or safer for small, sequential jobs. A shared environment may help when discoveries arrive unpredictably and specialists can work in parallel. The design ought to follow the work and its constraints. For now, I have a promising mechanism, a memorable pile of output and a better idea of where the fences belong. Humans still provide intent, judgement, accountability and governance. I'm curious how far agents can take the rest when we stop drawing miniature corporations by reflex. On my list are Zed's Delta, Happier, Gas City and OpenAI's Symphony, and I suspect I've missed plenty. If you've tried one of them, I'd love to hear what worked and where it fell down. What else should I look at if I want agents to choose work, share discoveries and stay within human intent? --- Read this article on my blog: Are We Making a Fundamental Mistake by Modelling AI Agent Swarms on Human Corporate Hierarchies? Connect with me on LinkedIn.
People are cooking up insane hobby projects. Guy uses the deepseek 4.1 model (that is finding all the zero days right now) to exploit and root any camera or sensor he can buy, flashes it with his own firmware and integrates it into this surveillance network Dicklesworthstone/franken_surveillance_system
This is why my FrankenGit project ( Dicklesworthstone/frankengit ) and indeed ALL my FrankenSuite projects are writing in strict, memory-safe Rust, and why I also eschew nearly all outside dependencies that I didn’t create, because then I can ensure my strict standards throughout.
I’m excited about my new plan to turn FrankenTerm into a world-class iPhone and iPad app. The native mux makes it a perfect candidate to seamlessly manage all my dev machines on the go without interfering with my main setup. Plan: github.com/Dicklesworthstone/frankenterm/blob/mai…
@AnthropicAI Cool, I'm building my own, too, and you guys are helping me do it: Dicklesworthstone/frankengit
VibeCoded SQLite? What $16,000 in subscriptions and not reading the code gets you In my opinion we are at the top of the AI + VibeCoding bubble. Compute is still largely subsidized by investors, and people can throw tons of resources at problems because they aren't bearing the full cost. VibeCoders also haven't been using AI enough to have to deal with long-term vibecoded projects (because they are at most 1-2 years old), and thus can still have optimistic projections for what LLMs can do. We should have known that writing full apps with minimal human supervision was a losing battle; Anthropic famously wrote a compiler from scratch that is horrendously slow and its outputs even slower. They eventually stopped the project when the agents could no longer make further progress implementing features without breaking things it had already written. Thus, like many other vibe coded projects, they gave up and moved on. Luckily, no businesses were built around that compiler and nobody was using it for production, so they can say it was a "learning experiment" and forget about it. SQLite is also amazingly fast, and can outperform "industrial" databases for many tasks (although I won't claim it will beat them for all tasks/deployments): andersmurphy.com Today I saw another vibe coded project trying to rewrite SQLite into Rust. SQLite is the most heavily used database. Its implementation is open source (although its tests are proprietary), and is battle tested over 26 years and 1 trillion deployments. (Your phone likely has dozens/hundreds of sqlite databases in it). The purported benefits are: - it's written in Rust - it supports multiple concurrent writers (whereas sqlite limits to 1) - it's written in Rust (must be emphasized) - it's agentic dicklesworthstone/frankensqlite Luckily, it's written with a C ABI, so I could easily port over some benchmarks I had for my workflows. The results are abysmal: For the 1MB read workload, Sqlite achieved 36x performance advantage on nvme (995,000 vs 27,000 ops/s) and 26x advantage on HDD. And although SQlite only had 1 writer (vs FrankenSQLite's 4), it still was 50% faster on write workloads. |workload|sqlite ops/s|frankensqlite ops/s| :--|:--|:--| |nvme read|995,790|27,489| |hdd read|76,,036|2,830| |nvme write|1,338|862| The author says he has $16,000 in subscriptions; I'm not sure if that's $16,000 a year, a month, or mix of subs + credits; what I imagine is that if he were paying API pricing (which we might all be someday) it might have cost $160,000 or more. SQLite is very fast, and I suspect the claims of AI development are a bit overstated.
로렌 탄이 한달에 2500개 PR을 자기가 부리는 에이전트들이 쳐낸다고 뿌듯해 하는 사이에, 제프리 엠마누엘은 하루에 2000여개의 컨트리뷰션을 하고 있습니다. 그는 올해에만 33만3천여개의 컨트리뷰션을 했군요. github.com/Dicklesworthstone t.co
brb, completely reimagining all accounting software the right way ($25b industry btw). Turns out my de novo graph database project (FrankenGraphDB) is the perfect primitive along with asupersync 🔜 FrankenAccounting ≥ SAP et al. And open source, too! github.com/Dicklesworthstone/franken_accounting/b… t.co