-
Notifications
You must be signed in to change notification settings - Fork 25.3k
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
Unsafe pattern for port restriction in documentation #29399
Comments
I have one Blazor example that filters requests for middleware that relies on For ...
... we don't control that here. That documentation is driven directly by the API itself, so you'd need to open an issue for the product unit asking them about making a change to the API remarks that generate the docs. I think you should do that and re-raise the whole subject with them ... https://github.com/dotnet/aspnetcore/issues Besides anything they might do with API remarks, I think the more important point is that dotnet/aspnetcore#46057 closed automatically just as it was about to reach critical mass 💣 and turn into a work item. If you open a new issue asking them to consider proceeding with new API, would you mind tagging me in your opening comment? I'd like to follow the discussion. Please add ...
Rick, we might be able to craft a one/two-line NOTE for the repo-wide INCLUDES that can appear anywhere. I'm going to wait and see how this plays out before I do anything for that Blazor doc. 👂 |
Language ideas for discussion ...
...
BUT ... if this subject is important enough to add a section to the main repo's Routing article, then the NOTE INCLUDE would just have a one-liner with a cross-link to the new section. |
@david-acker I think an issue should be opened and a PR made to these API's so the API docs warn about host spoofing. That could be done after the PU (Product Unit) approves our warning language. |
Imo the recommendations given for port restriction in https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-7.0#require-host are unsafe. They rely solely on the Host header transmitted by the client. This header often is fully client controlled. E.g. if a host has an exposed port 80 and an internal management port 5001 which is not exposed to the internet with endpoints restricted by using
.RequireHost("*:5001")
, this can be trivially circumvented by doing something likecurl --header "Host: whatever:5001" http://thepublicserver/healthz
which connects on port 80 but stating port 5001 in the host header passing theRequireHost
condition.The linked https://learn.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-7.0#host-matching-in-routes-with-requirehost and the extension method documentation in https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.routingendpointconventionbuilderextensions.requirehost?view=aspnetcore-7.0 also do not make it clear that this relies on the potentially user controlled
Host
header field.I think I've seen this implementation pattern recommended in other locations in the documentation and samples where the goal is to restrict endpoints to a given port. At the very least there should be a warning, that this is generally not a safe way to achieve such a restriction. Ideally a safe pattern would be suggested. Even better would be having some built-in way to achieve this common requirement in a safe way and documenting that. E.g. some RequireLocalPort, RequireLocalHost etc. that actually checks the local port / local IP in the http context instead of the host header. It seems this was suggested in dotnet/aspnetcore#46057 which is now closed & locked, though I am not sure the security angle was given sufficient appreciation there.
Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.
Associated WorkItem - 98270
The text was updated successfully, but these errors were encountered: