How We Secure GoAhead, Appweb and Ioto

EmbedThis continuously audits and tests its embedded web servers: GoAhead, Appweb and Ioto. Specialist AI auditors review the source code, while C test harnesses check parser behavior using fuzzing, protocol tests and tools that detect memory errors. Confirmed defects go through our normal fix and release process, with permanent regression tests to catch any recurrence.

Why Embedded Servers Need Targeted Testing

An embedded web server accepts untrusted network input before authentication. Our servers use C to meet memory and portability requirements, and often run on devices that stay deployed for years and are hard to update. One remotely reachable parsing defect can affect an entire product fleet.

Tests sent over a network connection leave many internal parser branches and malformed-input paths unexplored. Our program also tests parsers directly, generates inputs and checks that protocol rules and memory-safety requirements hold.

What We Examine

The audit covers 20 security domains across source code, configuration, deployment and build processes, grouped below:

AreaExamples
ProtocolRequest-line and header parsing, chunked transfer encoding, response generation
URL and routingURL parsing, filesystem mapping, route and handler selection, canonicalization and encoding
AuthenticationBasic and Digest authentication, sessions and cookies, authorization policy, password and secret handling
Dynamic executionCGI arguments and environment, templates, uploads, form and query parsing
Memory safetyBuffer bounds, allocation lifetime, integer arithmetic, error-path cleanup
TransportTLS configuration across OpenSSL and MbedTLS, certificate handling, socket I/O
DeploymentDefault configuration, logging and error disclosure, static files, administrative interfaces, proxies and caching
PlatformWindows, POSIX and RTOS behavior, 32-bit builds
ResilienceConnection and request limits, slow clients, algorithmic complexity
Build and supply chainHardening flags, compiler warnings, dependencies, feature-flag combinations
RegressionReplay tests for every past advisory, with searches for similar defects elsewhere in the code

We check that components interpret requests consistently, so differences in URL decoding, path normalization or message framing cannot bypass security checks.

How an Audit Runs

An automated coordinator schedules 41 specialist AI auditors alongside the C testing tools. Each auditor has a focused assignment, such as transfer encoding, Digest authentication or CGI, and read-only access to the source. Auditors compare required behavior with the implementation, then propose tests for potential vulnerabilities.

The specialists are grouped by their primary responsibilities. Each has its own checklist, and several domains draw on more than one specialist:

AreaSpecialists
HTTP and socket I/OHTTP parsing, transfer encoding, response generation, socket I/O
URL and routingURL canonicalization, routing, filesystem mapping, range and conditional requests
Authentication and authorizationBasic authentication, Digest authentication, sessions and cookies, authorization policy
Dynamic executionCGI, templates, uploads, form and query parsing, process spawning
Memory safetyBuffer bounds, allocation lifetime, integer arithmetic, error paths
TLSTLS configuration and certificate handling
Configuration and loggingConfiguration defaults, logging and error disclosure
PlatformsWindows, POSIX, RTOS
Fuzzing and dynamic testingHTTP fuzzing, URL fuzzing, authentication fuzzing, CGI fuzzing, differential testing, leaks
Build and supply chainBuild hardening, static analysis, dependencies and SBOM, feature-flag combinations
Clients and proxiesWeb client security, caching and proxy behavior
RegressionHistorical vulnerabilities and related-defect searches
DocumentationSecurity contract and deployment guidance

Specialists examine the functions that call or are called by the code under review, along with related code paths, protocol variants and build configurations. They must also report relevant code that falls outside every specialist's assignment.

Each scan records the audited commit, platform, compiler, sanitizers, feature flags and tool versions, so a later reviewer can see exactly what was tested on which build.

Testing Techniques

Parser harnesses, fuzzing, differential testing and keep-alive testing are in use on all three servers today.

How We Fix Security Issues

A finding is confirmed only when a test shows an observable violation: a sanitizer report, a failed correctness check, an incorrect authorization decision, disclosure of a sensitive file, or a parser disagreement. Each confirmed finding records the affected code, severity, Common Weakness Enumeration (CWE) category, root cause, evidence, regression test and proposed fix.

Confirmed defects then follow the same path as customer and researcher reports:

  1. Assess. Maintainers verify the defect, determine whether an attacker can reach it and assess its severity.
  2. Fix and verify. The full test suite runs under sanitizers. The regression test must fail before the fix and pass after it.
  3. Check related code. We search the product and the other two servers for the same root cause. We generalize the issue and look for similar cases with a similar underlying cause.
  4. Human review. A person reviews every ticket and every code patch before release.
  5. Release. The fix ships through the Builder with release notes and, where warranted, a security advisory. See our Security Policy.

How the Audit Program Improves

After each audit, an automated improvement process reviews the results for missed defects and gaps in coverage. It proposes changes to specialist instructions and priorities, or additional specialists. Each proposed change is tested separately before it is accepted.

Improvements are scored on new, confirmed findings backed by reproducible evidence, such as a sanitizer failure, a confirmed memory leak or a parser disagreement. Unverified and already known findings earn no credit; retracted findings reduce the score. To be accepted, each change must also:

The automated process can change only auditor instructions and configuration. Server source, test harnesses, fuzzers, test input collections and scoring code are maintained by people and protected against automated writes. A change that would loosen a check, remove an assertion or reduce coverage cannot be applied automatically; it becomes a proposal for human review. Every accepted change is recorded as its own commit with its rationale and check results. A failed change is reverted to restore the last accepted state.

More capable AI models may also improve the audits. Each model upgrade must pass the same evaluation and meet the same evidence requirements.

The first iteration using these acceptance checks ran in October 2026 and produced three proposed specialist improvements, which are under human review.

Scope and Limits

For details on how this program supports your Cyber Resilience Act obligations, see CRA Support.