Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

http: auditing Path() calls for safety with Pathless CONNECT #10851

Merged
merged 5 commits into from
Apr 22, 2020

Conversation

alyssawilk
Copy link
Contributor

This should result in all Path() calls not altered in #10720 being safe for path-less CONNECT.
The major change for this PR is that requests without a path will not be considered gRPC requests. They're still currently rejected at the HCM, but when they are allowed through they will simply not be gRPC rather than causing crashes.

Risk Level: medium (L7 code refactor)
Testing: new unit tests
Docs Changes: n/a
Release Notes: n/a
Part of #1630 #1451

Signed-off-by: Alyssa Wilk <[email protected]>
@mattklein123 mattklein123 self-assigned this Apr 20, 2020
@yanavlasov yanavlasov self-assigned this Apr 20, 2020
@@ -29,6 +29,7 @@ absl::optional<std::string> canonicalizePath(absl::string_view original_path) {

/* static */
bool PathUtil::canonicalPath(RequestHeaderMap& headers) {
ASSERT(headers.Path());
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this invariant guaranteed?

Copy link
Member

@mattklein123 mattklein123 left a comment

Choose a reason for hiding this comment

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

Thanks, amazing. Just some small nits. Like the other change I would recommend running the config_impl fuzzer locally for a bit if possible. Thank you!

/wait

@@ -36,6 +36,12 @@ class Common {
*/
static bool hasGrpcContentType(const Http::RequestOrResponseHeaderMap& headers);

/**
* @param headers the headers to parse.
* @return bool indicating whether the header is a gRPC request header.
Copy link
Member

Choose a reason for hiding this comment

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

nit: what is a gRPC request header? Can you clarify? Maybe a more descriptive name also?

Copy link
Member

Choose a reason for hiding this comment

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

Sorry super pedantically can we call this isGrpcRequestHeaders? (It's confusing to understand if we are operating on a single header or a group of headers)

@@ -95,9 +95,11 @@ Tracing::SpanPtr Driver::startSpan(const Tracing::Config& config,
}

if (!should_trace.has_value()) {
absl::string_view path =
Copy link
Member

Choose a reason for hiding this comment

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

nit: const, similar elsewhere if possible.

s
Signed-off-by: Alyssa Wilk <[email protected]>
Copy link
Member

@mattklein123 mattklein123 left a comment

Choose a reason for hiding this comment

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

Thanks!

@alyssawilk
Copy link
Contributor Author

Overnight fuzzing looks good!

@alyssawilk alyssawilk merged commit c13bf32 into envoyproxy:master Apr 22, 2020
penguingao pushed a commit to penguingao/envoy that referenced this pull request Apr 22, 2020
…oxy#10851)

This should result in all Path() calls not altered in envoyproxy#10720 being safe for path-less CONNECT.
The major change for this PR is that requests without a path will not be considered gRPC requests. They're still currently rejected at the HCM, but when they are allowed through they will simply not be gRPC rather than causing crashes.

Risk Level: medium (L7 code refactor)
Testing: new unit tests
Docs Changes: n/a
Release Notes: n/a
Part of envoyproxy#1630 envoyproxy#1451

Signed-off-by: Alyssa Wilk <[email protected]>
Signed-off-by: pengg <[email protected]>
spenceral added a commit to spenceral/envoy that referenced this pull request Apr 23, 2020
Signed-off-by: Spencer Lewis <[email protected]>
* master: (46 commits)
  allow specifying the API version of bootstrap from the command line (envoyproxy#10803)
  config: adding connect matcher (unused) (envoyproxy#10894)
  Add missing dependency on `assert.h` (envoyproxy#10918)
  Lower heap and disk space used by kafka tests (envoyproxy#10915)
  [tools] handle commits merged without PR in deprecated script (envoyproxy#10723)
  tools: including working tree in modified_since_last_github_commit.sh diff. (envoyproxy#10911)
  rocketmq_proxy: implement rocketmq proxy
  [docs] PR template to include commit message (envoyproxy#10900)
  docs: breaking long word to stop content overflow. (envoyproxy#10880)
  Delete legacy connection pool code. (envoyproxy#10881)
  wasm: clarify how configuration is passed (envoyproxy#10782)
  issue template: clarify security/crash reporting (envoyproxy#10885)
  api/faq: add entry on incremental xDS. (envoyproxy#10876)
  router: retry overloaded requests (envoyproxy#10847)
  Remove inclusion of pthread.h, not needed for linux compilation (envoyproxy#10895)
  request_id: Add option to always set request id in response (envoyproxy#10808)
  xray: Use correct types for segment document output (envoyproxy#10834)
  router: fixing a watermark bug for streaming retries (envoyproxy#10866)
  http: auditing Path() calls for safety with Pathless CONNECT (envoyproxy#10851)
  Remove hardcoded type urls Part.2 (envoyproxy#10848)
  ...
@alyssawilk alyssawilk deleted the path_audit branch August 27, 2020 16:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants