Skip to content

router: fix null-deref in addDownstreamSetCookie when downstream connection is null#45134

Open
omkhar wants to merge 2 commits into
envoyproxy:mainfrom
omkhar:fix/router-cookie-hash-async-null-deref
Open

router: fix null-deref in addDownstreamSetCookie when downstream connection is null#45134
omkhar wants to merge 2 commits into
envoyproxy:mainfrom
omkhar:fix/router-cookie-hash-async-null-deref

Conversation

@omkhar
Copy link
Copy Markdown
Contributor

@omkhar omkhar commented May 18, 2026

Commit Message:
router: fix crash in addDownstreamSetCookie when no downstream connection

Filter::addDownstreamSetCookie() unconditionally dereferences
downstreamConnection() to compose the per-connection seed for the
generated cookie value. When the router is invoked without a downstream
connection (e.g. Http::AsyncClient-driven paths such as ext_authz or
ratelimit side calls, mirror/shadow, and health checks) the connection
pointer is null and the worker process segfaults whenever a cookie hash
policy is configured.

Skip the connection-derived seed and return an empty cookie value for
those callers. The resulting cookie hashes identically across all async
invocations, which preserves hash-stability for the cookie hash policy on
this path.

Additional Description:

The TODO comment in router.h line 500 had already flagged the risk
("Need to check for null conn if this is ever used by Http::AsyncClient
in the future"); this PR addresses that TODO.

Reported privately via GHSA-47qr-fw7j-6m57; envoy security team asked
for this to be fixed in the open as a non-security bug because the
misconfiguration would surface in basic functional testing.

Fixes #45133.

Risk Level: Low.
Defensive null check; no behavior change for the existing (downstream-
connection-present) path. Affected async-router paths previously
crashed and now degrade to an empty cookie value, which is a strict
improvement.

Testing: Manual review of the affected code path against the
private-fork regression test. Happy to add a focused regression test
in test/common/router/router_test.cc that exercises the null-
connection path if maintainers would like; it adds enough scope that
I kept it out of this initial PR to keep the fix small.

Docs Changes: None required.

Release Notes: Added to changelogs/current.yaml under bug_fixes
(area: router).

Platform Specific Features: None.

…tion

Filter::addDownstreamSetCookie() dereferences downstreamConnection()
unconditionally to compose the per-connection seed for the generated
cookie value. When the router is invoked without a downstream
connection (Http::AsyncClient-driven paths: ext_authz / ratelimit
side calls, mirror/shadow, and health checks) the connection pointer
is null and the worker process segfaults whenever a cookie hash
policy is configured.

Skip the connection-derived seed and return an empty cookie value
for those callers. The resulting cookie hashes identically across
all async invocations, which preserves hash-stability for the
cookie hash policy on this path.

Reported privately via GHSA-47qr-fw7j-6m57; envoy security team
asked for this to be fixed in the open as a non-security bug
because the misconfiguration would surface in basic functional
testing (the affected configuration does not appear in production
deployments that exercise the async-router paths).

Signed-off-by: Omkhar Arasaratnam <omkhar@linkedin.com>
@omkhar omkhar temporarily deployed to external-contributors May 18, 2026 21:51 — with GitHub Actions Inactive
@repokitteh-read-only
Copy link
Copy Markdown

Hi @omkhar, welcome and thank you for your contribution.

We will try to review your Pull Request as quickly as possible.

In the meantime, please take a look at the contribution guidelines if you have not done so already.

🐱

Caused by: #45134 was opened by omkhar.

see: more, trace.

Replace 'segfault' with 'crash' in the bug_fixes entry from the
previous commit; envoy's pedantic spell check does not recognize
'segfault'.

Signed-off-by: Omkhar Arasaratnam <omkhar@linkedin.com>
@omkhar omkhar requested a deployment to external-contributors May 19, 2026 16:17 — with GitHub Actions Waiting
Comment thread changelogs/current.yaml

bug_fixes:
# *Changes expected to improve the state of the world and are unlikely to have negative effects*
- area: router
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs to use new changelog layout - see #45095

/wait

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

router: addDownstreamSetCookie() null-derefs when invoked without downstream connection (cookie hash policy on async-router paths)

2 participants