Bitchat launched as a vibe-coded secure messenger with broken identity checks

Tombstone icon

Jack Dorsey released Bitchat, a Bluetooth mesh messaging app built as a weekend project with help from Block's Goose coding agent. The project was framed around secure, local communication, but security researchers quickly found that its identity model did not properly authenticate who users were talking to. A man-in-the-middle attacker could impersonate a trusted contact, forcing the project to add warnings and move toward the established Noise protocol.

Incident Details

Severity:Facepalm
Company:Bitchat
Perpetrator:Founder/Developer
Incident Date:
Blast Radius:Beta users and observers were shown a secure-messaging app whose identity checks could let attackers impersonate trusted contacts

Bitchat had the perfect launch ingredients for a 2025 technology cycle: a famous founder, a weekend build, an AI coding agent, an offline Bluetooth mesh network, and the promise of private communication without phone numbers, email addresses, or central servers.

Jack Dorsey described it as a weekend project for learning Bluetooth mesh, store-and-forward models, relays, and encryption. In a GitHub discussion, he said it was part of a personal challenge to build things he did not think he or current AI tools could build, naming Block's Goose agent. He also wrote that software had a new language and compiler: English and intelligence models.

The app worked quickly. According to Dorsey's own account, the basic local chat worked within a day, after which he added private messages, channels, and private channels. That speed was the story. It was also the problem.

On July 7, 2025, Supernetworks CEO Alex Radocea published a security analysis of Bitchat's identity model. His conclusion was direct: the system did not have meaningful trust or authentication built in, and the identity key was decorative in the way it was used. A user could mark another contact as a favorite, but the cryptographic identity binding did not actually prove that the person on the other end was the trusted contact.

For a messaging app marketed around privacy and resilience, that is not a cosmetic flaw. That is the part of the system that tells you who you are talking to.

The MITM Problem

Radocea demonstrated a man-in-the-middle attack against Bitchat's Favorites feature. The attack worked because the app accepted identity material without proving that the ephemeral keys in the current session belonged to the real person the user thought they were chatting with.

In practical terms, an attacker in the right network position could present Bob's identity key with the attacker's own ephemeral key material. Alice would see what looked like Bob, including the favorite indicator, and could send messages under the belief that the conversation was trusted. The attacker could then impersonate the trusted contact.

That breaks the core security claim of a private messenger. Encryption is only useful if the user knows who receives the encrypted message. If the identity layer is weak, the math can look serious while the product still lets the wrong person into the conversation.

Trail of Bits later characterized the issues as real and serious, including the broken identity authentication and weaker-than-standard forward-secrecy properties. The firm's analysis was careful not to treat Bitchat as uniquely doomed; secure messaging is hard, and the project was open source and rapidly changed. But Trail of Bits also made the key point: these were fundamental design flaws, not small polish bugs.

The Vibe Coding Shape

Bitchat is a useful graveyard entry because the failure mode is exactly what security people worry about when AI-generated software handles a domain like cryptography. The app looked functional. It sent messages. It used encryption terms. It had identity keys. It had a secure-messenger vibe.

But the hard part of secure messaging is not making bytes move between devices. It is binding identities to keys, handling key changes, preventing impersonation, supporting forward secrecy, designing recovery behavior, and matching user interface cues to real trust guarantees. Those requirements do not emerge automatically because a model wrote code that compiles.

Radocea's analysis made the same point in technical terms: the code had the appearance of identity machinery, but the verification did not authenticate the other party in the way users would expect. Coverage of the launch also confirmed the vibe-coding path, including Dorsey's use of Goose and his description of programming through English and intelligence models.

Dorsey's response on GitHub was unusually candid. He wrote that the private messaging and channels "worked" but were not robust or thought through enough, linked to the Supernetworks analysis, and said he planned to convert Bitchat to the Noise Protocol Framework for stronger key management and encryption. That response was better than denial. It also confirmed the central point: the project had raced from weekend experiment to public secure-messaging narrative before its security model was ready.

Why Warnings Matter

Bitchat's repository did include warnings that the software had not received external security review and should not be relied on for production security. That matters. It means the project was more transparent than many closed AI-built products.

But the public framing still matters too. Dorsey discussed the app in contexts where network resilience and censorship resistance are emotionally loaded, including situations where people may want communication during protests or outages. Trail of Bits argued that, given Dorsey's reach, he had a responsibility to be careful about how the app was described. A weak secure messenger can be worse than no secure messenger because it gives users confidence that the system has not earned.

That is the broader vibe-coding issue. A prototype can become public before anyone has separated "this works" from "this is safe." In ordinary CRUD apps, that can mean exposed data or broken auth. In secure messaging, it can mean users believe they are speaking privately to a trusted person when the protocol cannot prove it.

The Better Path

The remediation path pointed in the right direction: use proven protocols and get serious review. Radocea recommended established cryptographic approaches such as Signal, Noise, OTR, or existing decentralized messaging systems rather than inventing trust machinery from scratch. Trail of Bits made the same broader point: secure messaging is a mature field with hard-won lessons, and week-old implementations should not be compared to systems that have spent years under review.

Bitchat may mature. The open-source response, quick patches, and planned Noise migration are all healthier signs than pretending nothing was wrong. But the initial failure still belongs here because it captured the core danger of vibe-coded security products: a famous builder, a powerful agent, and a fast demo can produce something that feels like secure software before it has done secure-software work.

Cryptography does not care how good the vibes are. Identity checks either authenticate the other party or they do not. In Bitchat's first public version, they did not.

Discussion