
Zero-trust anti-forensic HTTP client. Wipes secrets. Severs traces. CPR in a Stealth Tank. 👻
Zero-trust, anti-forensic HTTP client. Wipes secrets. Severs traces. CPR in a Stealth Tank. 👻
BurnerNet is a C++20 anti-forensic HTTP client. It provides a fluent, CPR-like API for apps that cannot fully trust the local machine—physically wiping secrets from RAM and severing execution traces to hide your logic from scanners and debuggers.
It offers familiar host-compatible defaults for ordinary HTTP and an explicit Hardened profile for hostile environments. Both paths favor short-lived clients; advanced trust remains application-owned.
Looking to protect the payloads downloaded by BurnerNet? Check out RipStop Codec for in-memory asset descrambling.
Principles • Getting Started • Integration Paths • Security Reality
| Area | BurnerNet |
|---|---|
| Language | C++20 |
| Platform | Windows x64/x86 (First-Class), Linux (Verified) |
| Transport | libcurl-backed HTTP(S) |
| Memory hygiene | Secure wiping utilities and wiping allocators |
| Forensic hygiene | Automated heap/stack scrubbing across BurnerNet-managed transport state |
| Dynamic Analysis | Call stack isolation can sever the link between consumer and transport |
| Build hardening | Optional diagnostic-string removal, obfuscated literals, reduced C++ runtime metadata in hardened builds |
| Runtime hardening | DoH support, provider-based secrets, and stricter trust controls |
| Integration | CMake or Visual Studio source-drop |
Use BurnerNet when a normal HTTP client is too trusting for your environment.
It helps when you want to:
BurnerNet fits projects such as:
libcurl and OpenSSL-backed flows. Sensitive transport buffers are wiped as they leave BurnerNet-managed lifetime. This hygiene is verified on both Windows and Linux within the audited configurations described in the docs.WithResponseVerifier(...) instead of being hardcoded into a shared library.BURNERNET_DIAGNOSTIC_STRINGS=0 so ErrorCodeToString(...) returns stable E<number> values without embedding symbolic error names.BURNERNET_HARDEN_IMPORTS=1 can resolve runtime dependencies dynamically instead of advertising them directly in the import table, using BurnerNet's path on Windows.BurnerNet does not just claim an import-light hardened mode; it also ships with audit notes for specific tested configurations. In a Windows x64 Release audit with BURNERNET_HARDEN_IMPORTS=ON:
libcurl.dll, ws2_32.dll, bcrypt.dll, or crypt32.dll were observed in the audited binary.Audit details and methodology:
Fastest path:
<burner/net.h>.Minimal example:
#include <iostream>
#include <burner/net.h>
int main() {
burner::net::Client client;
if (!client.IsReady()) {
std::cerr << burner::net::ErrorCodeToString(client.InitError()) << '\n';
return 1;
}
const auto response = client
.Get("https://example.com")
.WithHeader("Accept", "text/html")
.WithTimeoutSeconds(10)
.Send();
if (!response.TransportOk()) {
std::cerr << burner::net::ErrorCodeToString(response.transport_error) << '\n';
return 1;
}
std::cout << "HTTP " << response.status_code << '\n';
return 0;
}
Client uses Standard defaults: system CA, DNS, and proxy with TLS peer and hostname verification enabled. WithCasualDefaults() remains available as a Standard compatibility alias.
For security-critical traffic, use the Hardened profile. Build() rejects missing controls before any request:
auto secure = burner::net::ClientBuilder(burner::net::ClientProfile::Hardened)
.WithMtlsProvider(ProvideMtlsCredentials)
.WithSecurityPolicy(AppSecurityPolicy{})
.WithDnsFallback(burner::net::DnsMode::Doh,
"https://resolver.example/dns-query",
"Primary DoH")
.AllowSystemDns(true) // explicit fallback, after DoH
.WithResponseVerifier(VerifySignedResponse)
.Build();
Hardened requires peer and hostname verification, stack isolation, DoH-first routing, an app response verifier, and an app-owned trust mount. Persistent WithMtls(...) credentials are rejected; use WithMtlsProvider(...).
Use this when your downstream project already uses CMake and you want the cleanest dependency-managed path.
Docs:
Use this when your environment is MSBuild-first or you want BurnerNet compiled directly inside your .vcxproj.
Docs:
Use this when you want to reduce obvious runtime dependency exposure and are prepared to manage bootstrap loading explicitly.
Enable:
BURNERNET_HARDEN_IMPORTS=1KernelResolver path on Windows to support a more import-light runtime footprintReference:
Linux Support: BurnerNet provides full forensic parity (Memory Wiping & Stack Isolation) on Linux. See docs/LINUX_USAGE.md for build instructions.
Recommended defaults:
Examples:
Documentation:
libcurl 7.87.0+ and OpenSSL headersBurnerNet is a hardening layer designed to raise the cost of attack to a professional level. We operate on the principle that stealth should be architectural, not just superficial.
Can an attacker bypass BurnerNet if they have the source code? Knowledge of BurnerNet's source code is not, by itself, a master key to every downstream application. BurnerNet follows Kerckhoffs's Principle: the library is designed so that your app-specific trust anchors (HMAC secrets, pinned keys, UI logic, policy hooks) remain application-owned. Knowing the transport layer does not automatically yield a universal bypass of your specific security flow.
| Concern | Typical HTTP stack | BurnerNet |
|---|
| Client lifetime | Often shared and long-lived | Designed for disposable clients and burst-scope use |
| Sensitive values | Secrets often sit in config or memory longer than needed | Provider callbacks fetch them close to use |
| DNS and trust | Usually inherits local resolver and host defaults | Supports stricter trust controls including DoH fallback and pinned keys |
| Verification | App-specific integrity checks are often bolted on later | Built to work with pre-flight, transport, and response verification hooks |
KernelResolver.WithStackIsolation(true), the library executes the transport lifecycle on a detached worker thread. This can physically sever the caller's call stack and reduce direct top-down tracing of application logic.