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

Muddy Boots HTTP #575

Open
dnwiebe opened this issue Jan 19, 2025 · 0 comments
Open

Muddy Boots HTTP #575

dnwiebe opened this issue Jan 19, 2025 · 0 comments
Labels
spike The deliverable for this card is one or more additional cards

Comments

@dnwiebe
Copy link
Collaborator

dnwiebe commented Jan 19, 2025

An evil exit Node can add extra garbage ("mud") to the end of an HTTP response in order to cost the originating Node extra money for exit and routing services. It can do this in such a way that the browser does not make the discrepancy obvious to the user (for example, if the garbage is all whitespace).

Any exit Node that does this should be malefactor-banned as soon as the offense is discovered, the route containing that Node removed, and the user notified (since he may lose his application session when the exit Node changes).

Most responses with bodies have Content-Length headers. The Node could compare the actual response length with the Content-Length value to detect malice, but since HTTP is not protected, the exit Node could adjust the Content-Length header to include the garbage.

Responses with bodies but no Content-Length header generally have Transfer-Encoding: chunked headers, and the response body comes in chunks where each chunk has its own length field. Comparing actual length to length fields could be done here as well, but the exit Node could forge valid-looking response-body chunks as well.

Perhaps some heuristic scanning of the response-body data could be done to identify trailing garbage designed not to show up on a browser, but A) this would probably be fairly easy to defeat for an attacker who had the source code, and B) some legitimate response bodies might come with a small amount of whitespace at the ends.

Explore these options and brainstorm a few more, then write a card about how to address Muddy Boots in HTTP. The card may be simply "Don't use naked HTTP;" but if there's a reasonable solution, we'd want to know about it.

@dnwiebe dnwiebe converted this from a draft issue Jan 19, 2025
@dnwiebe dnwiebe added the spike The deliverable for this card is one or more additional cards label Jan 19, 2025
@dnwiebe dnwiebe mentioned this issue Jan 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
spike The deliverable for this card is one or more additional cards
Projects
Status: 🆕 New
Development

No branches or pull requests

1 participant