just link to the real thing :) [0]
[0] https://twitter.com/nealagarwal/status/1747284257582506102
HN user
console.com
just link to the real thing :) [0]
[0] https://twitter.com/nealagarwal/status/1747284257582506102
facepalm I read that paragraph, but my brain skipped that sentence for some reason. Thanks for clarifying
How is this different than just turning your TV off? I feel like I'm missing something
Somewhat relevant: https://tonsky.me/blog/disenchantment/
As of go 1.18, fuzzing is built into the toolchain itself, and is what we're using in this post.
We go over the basics here [0], if you'd like to start at the beginning
It's much more common than you may think - especially at larger organizations where engineers go "off-script" frequently.
That being said, we wanted to highlight an example of how fuzzing can be applied to a typical (albeit, toy) API to find logic bugs, and figured SQL Injection would be something that resonated with most (all?) developers.
A lot of folks we talk to think fuzzing is only useful for finding memory leaks in C++ programs, so we wanted to show how adding a single fuzz test to your API can find SQL injection and other logic bugs.
Would love to hear others' experience with Go fuzzing now that it's been out for a few months.
2. What measures is Oven taking to proactively detect and mitigate vulnerabilities? (e.g.: fuzzing, audits, bug bounties)
We're huge fans of bun at Fuzzbuzz (waiting for it to get a bit more production-ready). If Jarred's interested, we'd be happy to donate some compute to support fuzzing Bun.
<hn username> @ fuzzbuzz.io
I've heard this talked about before, and I believe there's a phrase for it, but I don't remember. Do you happen to know?
Good catch :) fixed!
It does! Fuzzing actually started off as a tool built by security researchers to find vulnerabilities in parsers, and other complex codebases, usually written in C/C++ (looking for memory bugs). So anything that deals with untrusted binary data is a prime candidate for fuzz testing.
Go’s fuzzing framework supports `[]byte` arguments as well as all of the standard Go primitives, so you should be able to test netcode this way.
If you're looking for a C/C++ solution, my recommendation is libfuzzer [0]. We've also built our own C/C++ fuzzing engine at Fuzzbuzz [1].
[0] https://llvm.org/docs/LibFuzzer.html
[1] https://docs.fuzzbuzz.io/docs/getting-started-in-c-or-c++
This was a big reason for why our entire eng team moved to linux
I think this downplays things quite a bit. I grew up as a middle class immigrant in Canada. My parents have office jobs, but basically 0 connections (certainly not the ones you're implying you need to raise).
In university (which I paid for myself through internships + loans), my cofounder and I just started coding on an idea, which got us into YC, which helped us get in front of a bunch of VCs, which allowed us to raise $3m in seed funding. No connections, just lots of googling and talking/pitching to anyone that would pay attention to us.
It could've been the 5% luck you're talking about, but certainly don't think that coming from a well-connected family is the only way to fundraise in 2021.
Should add the date to the title: (2017)
No reason to be ashamed, it's still a fairly niche concept. We're huge fans of it though. We'll definitely be writing an in-depth post about it in the coming weeks/months.
Sure, but one thing I don’t understand is why fuzzing is not used more often for testing basically any pure function [...]
Agreed 100%, and is actually what we encourage people to do. Since this is an intro article though, we wanted to keep things simple, and everyone understands the danger in accepting inputs over a trust boundary. Your suggested method is what the fuzzing community calls differential fuzzing [0]. It’s been incredibly effective at finding bugs in crypto libraries [1], and is currently being used to fuzz different Ethereum node implementations [2]. There are other ways you can fuzz functions, and we sort of hint at this in the post when we say:
“If you can define a property that must hold true for any given input (also called an invariant), then the fuzzer will look for inputs that break your invariant”.
Usually this translates into writing assertions the same way you might when you’re writing property-based tests [3]. In fact, I think the fuzzing community has a lot to learn from property based testing. These are more advanced topics though, that we hope to cover in a later post, and why we omitted these details from this one.
This list of issues seems sort of manufactured [...]
Developer friendliness means different things to different people depending on their area of expertise, years of experience, or interest levels. While the list may seem manufactured, we’ve found that unfriendly tooling and uncertainty about what to tackle first can turn developers off even trying to write a fuzz test at all. Understanding what makes a good fuzz test, instrumenting your code properly, running many fuzz tests at scale, and triaging and interpreting the results of a fuzzing run can make fuzzing prohibitively difficult for a new engineer to set up. This is what we’re focused on solving.
Advertising a product without saying anything about it is off-putting to me [...]
Fair enough. Fuzzbuzz isn’t quite ready for public access yet, so that’s why we’re a bit vague here, but the intention was not to advertise our product (and is why we only wrote a couple paragraphs at the bottom). We were just excited to write a post about fuzz testing, and figured anyone who’s interest was really piqued could get in touch. We hope to expand this post and use this as an educational resource long-term.
[0] https://en.wikipedia.org/wiki/Differential_testing
[1] https://guidovranken.com/2019/05/14/differential-fuzzing-of-...
[2] https://github.com/sigp/beacon-fuzz
[3] https://hypothesis.readthedocs.io/en/latest/stateful.html?hi...
Argh, this is the paper I meant to link: https://arxiv.org/pdf/2008.06537.pdf
(Updated the above comment as well)
Basic fuzzers can surprisingly go a long way. Barton Miller (the professor who first coined the term fuzzing), actually wrote a paper last year [0] where he just ran a very basic fuzzer against a bunch of common UNIX tools. Even after all these years of testing/usage, they still managed to find a ton of issues.
literally dozens of us!
I believe they use libfuzzer to test isolated components [0], but seems like they wanted to specifically focus on browser fuzzing for this post (it's probably more interesting, too).
[0] https://firefox-source-docs.mozilla.org/tools/fuzzing/fuzzin...
Fuzzbuzz | Full Stack Engineer (Typescript/Go) | $125k-145k + 0.25%-0.5% | SF Bay (Redwood City) | https://fuzzbuzz.io
Fuzzbuzz is hiring a full stack engineer (true full stack, not just frontend) to help build our fuzzing as a service platform. Backend is 100% Go and frontend is your choice (currently Angular, but open to letting you rewrite it), since you'd completely own it. 60/40 backend/frontend work split. Production experience writing frontend code is a must, but no Go experience required.
We're a team of 5 - 4 engineers, 1 designer. The team is very technical (founding engineers have 20+ years of experience each), which allows us to iterate quickly using technologies that solve problems, rather than flavor of the month tech (stack is Go, Typescript, Postgres, Nginx, Linux).
More info here: https://angel.co/company/fuzzbuzz/jobs/853711-full-stack-eng...
Send me an email with your resume: andrei [at] fuzzbuzz [dot] io
whats the best way to contact you?
Fuzzbuzz | Fuzzing Engineer (second engineer) | $150k-$180k + equity | Location TBD - South Bay, CA | Full-Time | ONSITE | YC W19
We're Fuzzbuzz (https://fuzzbuzz.io) and we're building a fuzzing as a service platform that integrates into CI systems and the modern SDLC.
We recently raised a $2.7M seed round [0] and we're looking to hire a Fuzzing Engineer to work full-time on, and own the technical direction of, a brand new state of the art fuzzing engine. A lot of research has been done in this space, but very little of it provides real benefits over AFL/Libfuzzer. We're building a fuzzer that works with real-world applications written in modern languages and will significantly change the role fuzzing plays in the SDLC.
We're currently 4 people, so we don't have any hard requirements, but the ideal person looks something like:
- Go/C/C++ experience (2+ years)
- Knowledge of or capability to learn advanced fuzzing techniques and optimizations
- Interest/experience with distributed systems, systems level programming and compilers
- Ability & desire to take full ownership of a product and define a new paradigm of software testing
Contact: jobs@fuzzbuzz.io - include "Hacker News" in the subject.
[0] https://techcrunch.com/2019/04/18/y-combinator-grad-fuzzbuzz...
We sort of picked the name as a joke at first, but we noticed that it was very memorable (as meme-inspired names tend to be), so we decided to keep it. Don't regret it, yet.
If you're interested in learning more, our docs [0] explain everything from the ground up.
Thanks for the heads up! I haven't heard of Security Innovation, so definitely going to look more into what happened there.
I think the key difference though, is that we don't do any consulting/training/manual pentesting. We're more of a dev tool company than a security company in that we don't aim to replace security engineers but to make their lives easier.
Java is one of the next 2 languages we plan to support (hopefully in the coming month).
If you send me an email (andrei@fuzzbuzz.io), I can let you know when we launch Java support
Glad you found it useful - it's a topic that comes up a lot when we talk to customers and we figured we should just be upfront about it.
Wasn't our idea though - we stole it from Labelbox [0] :)
My bad - I accidentally disabled the controls when I was setting it up. Should be fixed now.
Also, yeah, we're not video experts, so we had a feeling the video might not be the correct format. We just wanted to put something up that showcased the platform without forcing you to sign up, but we'll definitely make sure our next video is in a better format.
The nature of fuzzers like AFL is that you get better results by instrumenting your code and writing your own harness, but AFL has a "qemu mode" that runs precompiled binaries in an instrumented VM instead. We'll be adding this to the platform in the near future.
You won't get the same kind of results that you could by writing your own harness, but it would still be possible to find crashes, extreme memory usage or timeout bugs. Using something like libdislocator [1] would allow you to expose certain memory bugs as well.
[1] https://github.com/mirrorer/afl/tree/master/libdislocator