<oembed><type>rich</type><version>1.0</version><title>hodlbod wrote</title><author_name>hodlbod (npub1jl…jynqn)</author_name><author_url>https://yabu.me/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn</author_url><provider_name>njump</provider_name><provider_url>https://yabu.me</provider_url><html>Post Mortem:&#xA;&#xA;The server I run Flotilla, zooid, and other things on got hacked this morning at about 5 AM Pacific. I had disabled the gitea action runner for pull requests, but not for users&#39; own repositories. The attacker triggered two workflow runs (called &#34;exploit&#34; and &#34;probe&#34;) in an action runner container which had the docker socket mounted.&#xA;&#xA;At about 8 AM this morning I purged the attacker&#39;s two accounts (which was a mistake because it destroyed forensics), and gave Claude ssh access and asked it to clean things up. Gitea has been moved to a dedicated host with the action runner container configuration fixed and registrations disabled. The rest of the services have been manually moved to a fresh host.&#xA;&#xA;There&#39;s no evidence that the attacker exfiltrated any sensitive data, installed any software, or executed any supply chain attacks (no packages were published, no updates released, and I keep signing keys elsewhere). This appears to have been an automated attack targeting poorly-secured gitea instances.&#xA;&#xA;I&#39;m treating the server as completely compromised, and have rotated all credentials and moved everything to new servers.&#xA;&#xA;The main things for you to know:&#xA;&#xA;- If you host a relay with me, it&#39;s possible the attacker had access to your space&#39;s chat messages.&#xA;- Hosted relays&#39; secret keys were compromised. These were never shared with tenants, have been rotated, and never published any metadata. They were only used to map self-published events to a relay url.&#xA;&#xA;This attack has made me reflect on the security characteristics of two things in particular:&#xA;&#xA;- Nostr private keys can&#39;t be rotated. I stored low-value keys on disk rather than remotely, let alone using multisig. This is a very different threat model than people are used to. I am going to look into a developer-oriented way to store private keys for production use.&#xA;- NWC connection strings can&#39;t revoke themselves. One of my users had entered their connection string into caravel to enable automatic payments. I&#39;ve contacted them and encouraged them to revoke the connection, but it&#39;s not something I can do myself. I am going to look into adding a self-revoke protocol to NWC (and NIP 46).</html></oembed>