Brad ArantandClaude Sonnet 5 2cea81c996 Fix heap corruption from unvalidated Content-Length causing repeated production crashes
HTTPRequest::parse() passed the parsed Content-Length straight into a
bounds check and a buffer read with no validation. ZString::asInteger()
accumulates digits into a plain 32-bit int with no overflow check, so a
request claiming an absurd Content-Length (confirmed live: a classic
SSTP vulnerability-scanner probe sending "Content-Length:
18446744073709551615") silently overflowed to -1. That negative value
passed the "buffer.getLength() < contentLength" guard for any real
buffer size, then got used as a length in ZString(cursor,
contentLength) - reinterpreted as an enormous size_t, this read far
past the real buffer and corrupted the heap, crashing the process
(sometimes immediately, sometimes much later in an unrelated objects
destructor) every time this scanner traffic reached it.

This single bug was silently crash-looping barant.com (3x in ~30
hours) and the ClockPlanet server (3x over the same window) before
systemds auto-restart each time masked the outage - confirmed via
live core dump analysis (gdb bt full showing double free or
corruption (out) inside MString::~MString, called from
HTTPRequest::parse, with contentLength = -1 in the frame). Fixed by
rejecting a negative Content-Length immediately, before it is ever
used - the same throw-on-malformed-input pattern this function already
uses for a bad request line and unsupported Transfer-Encoding.

Verified live against the exact attack string on both barant.com and
the ClockPlanet server: the connection is now cleanly rejected and the
service stays up with no restart.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-10 07:39:46 +00:00
2023-10-06 18:32:17 +00:00
2022-01-24 14:03:58 -08:00
2025-02-06 14:34:11 -08:00
2025-02-06 14:34:11 -08:00
2022-05-23 12:51:44 -07:00
2022-05-23 12:51:44 -07:00
2023-03-10 12:55:08 -08:00
2025-03-11 07:34:17 -07:00
2025-03-11 07:34:17 -07:00
2025-03-11 16:59:16 -07:00
2022-01-24 14:03:58 -08:00
2022-01-24 14:03:58 -08:00
2025-03-12 09:30:56 -07:00
2025-03-11 16:59:16 -07:00
2025-03-11 07:34:17 -07:00
2025-12-04 17:04:55 -08:00
2019-09-13 10:29:36 -07:00
2021-07-23 11:44:36 -07:00
2025-12-09 08:46:33 -08:00
2025-12-04 17:04:55 -08:00
2025-12-04 16:40:11 -08:00
S
Description
This repository contains the CoreUtils library. CoreUtils provides support for ServerCore, JetCore and other subsystem libraries used in higher functions.
33 MiB
0 Stars 1 Watchers 0 Forks
Languages
C++ 97.8%
Makefile 1.9%
Shell 0.3%