narfindustries / http-garden Goto Github PK
View Code? Open in Web Editor NEWDifferential testing and fuzzing of HTTP servers and proxies
License: GNU General Public License v3.0
Differential testing and fuzzing of HTTP servers and proxies
License: GNU General Public License v3.0
Right now, control flow is collected by sending signals to afl-showmap. This is not only a hack, but inaccurate because the signal to start tracing must be sent before the fuzzed input (i.e., the request).
A better way to do this would be to make a little LD_PRELOAD library that hooks accept() and makes it automatically signal the parent process. This should cut out a lot of the noise from the coverage.
And they should not be
Disadvantages:
Advantages:
I think this is probably worth it.
Add proxygen to the Garden.
Civetweb is a fork of Mongoose that might be vulnerable to some of the same problems as Mongoose. It could be worth adding to the Garden.
Add pen as a target in the Garden.
Add Rainbows! to the Garden.
Right now restricted to just /
Add Libhttpserver as a target to the Garden.
This could use a normalization
Add ktor to the Garden.
(Thanks to Jonathan Leitschuh for bringing this to my attention)
Every once in a while, especially if the Garden has just started, running the fuzzer will cause an assertion failure. This assertion is the one that ensures that the coverage information collected is not out of date.
Too annoying to deal with njs issues
In this commit there may be a typo in the comparison between j and i. Perhaps I am misunderstanding the intent behind this code, but it causes the grid view not to work in "both" directions?
When the line 101 = if j == i:
Payload was set to "payload 'POST / HTTP/1.1\r\nHost: a\r\nTransfer-Encoding: chunked\r\n\r\n0\n\r\n'"
\Tom
So it can act as an origin too
HTTP/2 support in the Garden is limited. I had a half-baked version of this at one point, but I removed it because it was distracting from HTTP/1, and I was using an external library for HPACK.
It would be nice to add proper H2 support.
Currently, the Garden uses a fixed timeout for each type of target. We could achieve orders of magnitude better performance by using dynamic timeouts.
I have previously played with adding H3 support to the Garden, but didn't get very far. This would be really nice to have.
Add Netty as a target in the Garden.
Some servers support only a finite set of HTTP methods. This clutters fuzzer results. We should be able to ignore these problems if we know the set of allowable methods for each server.
and figure out a way to make the build not take 100000 years
When you fuzz the Beast target for too long, it starts hogging a core. I should probably figure this out.
Some UI pain points:
transducer_fanout
, rejection messages are printed separately from regular output.history
, alignment is weird because numbers can have different numbers of digits.payload: 'GET / HTTP/1.1\r\nHost: b\r\nTest: \xff\r\n\r\n'
Right now, regex highlighting only works for fanout.
this could use a normalization
Add falcon to the Garden.
The README is too long :)
Add Kestrel, the ASP.NET web server, to the Garden.
Readme is too long
The Garden doesn't support these methods because they're special cases. I should add support for them because they're probably a wellspring of interesting bugs.
Add merecat to the Garden.
Add libsoup as a target in the Garden.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.