Guido Vranken Profile
Guido Vranken

@GuidoVranken

Followers
5,537
Following
563
Media
93
Statuses
834

Software security and fuzzing. Contact: guido @guidovranken .com

Limburg, Nederland
Joined June 2018
Don't wanna be here? Send us removal request.
Explore trending content on Musk Viewer
Pinned Tweet
@GuidoVranken
Guido Vranken
2 years
I'm now the world's number 1 Ethereum vulnerability finder 🐐
Tweet media one
152
201
812
@GuidoVranken
Guido Vranken
4 years
I've released my fuzzing engine:
3
147
416
@GuidoVranken
Guido Vranken
2 years
OpenSSL vulnerabilities:
Tweet media one
4
180
389
@GuidoVranken
Guido Vranken
4 years
Tuning my fuzzing server.
Tweet media one
10
40
344
@GuidoVranken
Guido Vranken
3 months
Solana bug bounty is fake, in Aug 2023 I reported a bug, they acknowledged the issue, then stopped responding, then *deleted* the report (but I have a PDF printout of the discussion saved locally). Just stick to reputable programs like Ethereum that play fair.
20
25
246
@GuidoVranken
Guido Vranken
3 years
24 year old bigint subtraction bug in libgcrypt
2
56
239
@GuidoVranken
Guido Vranken
1 year
BitTorrent is an amazing and underrated technology. It's lean, easy to use, decentralized and censorship-resistant. More people should be using it.
19
14
236
@GuidoVranken
Guido Vranken
4 years
By popular request I've released my LD_PRELOAD POSIX network API emulator, for fuzzing networked applications. Like Preeny but more ambitious.
1
68
199
@GuidoVranken
Guido Vranken
3 years
I found a math bug in the blst pairing library which Ethereum uses (but Eth isn't affected because it doesn't use the affected function). A year of fuzzing on OSS-Fuzz didn't find it, and I found it accidentally as I was looking for something else..
2
21
194
@GuidoVranken
Guido Vranken
3 years
Ethereum's bug bounty program is great👍👍👍
Tweet media one
31
78
172
@GuidoVranken
Guido Vranken
5 years
I had so much fun auditing rippled. The code is neatly formatted and organized, minimal use of memcpy, smart pointers everywhere, extensive use of the battle-tested Boost libraries, use of Protobufs, no excessive resource consumption.. 👍
2
41
169
@GuidoVranken
Guido Vranken
4 years
Lots of bugs found with and by Cryptofuzz lately; this is about 2 months worth, doesn't include bugs found for clients, and more is to be announced. It turns out that ECDSA implementations especially are prone to non-conformism and other bugs.
Tweet media one
3
49
181
@GuidoVranken
Guido Vranken
1 year
Crypto/math bugs found in the past few weeks
Tweet media one
2
24
155
@GuidoVranken
Guido Vranken
3 years
Golang cross-compiling really works amazing, you can just type 'GOARCH=s390x go build' and without even printing a warning it produces a binary you can readily run with QEMU. To do that with C/C++ you need a PhD in cross-compiling..
5
19
146
@GuidoVranken
Guido Vranken
6 years
@jon_bottarini @Hacker0x01 @EOS_io Thank you. A couple more waiting to be rewarded. I think the final tally was $120K but I lost count. Took me about a week.
15
13
125
@GuidoVranken
Guido Vranken
1 year
@zillowgonewild This happened in the Netherlands a few years ago. The perpetrator is still walking free.
Tweet media one
Tweet media two
Tweet media three
Tweet media four
4
1
102
@GuidoVranken
Guido Vranken
3 years
The streaming API of the reference implementation of BLAKE (SHA-3 finalist, not BLAKE2 or 3) contains a bug where passing 0 bytes, instead of being a no-op, resets the internal state, yielding the base hash 716f6e863f744b9ac22c97ec7b76ea5f5908bc5b2f67c61510bfc4751384ea7a
@GuidoVranken
Guido Vranken
3 years
Today there will be the coordinated disclosure of a crypto implementation bug that has gone unnoticed for many years. The impact is probably very limited but it's interesting nonetheless.
2
7
43
4
42
98
@GuidoVranken
Guido Vranken
5 years
Find Squid bug for bug bounty. Write RCE exploit. Inform vendor (Oct. 5 2019). Send patch. Squid stops responding. Ask Internet Bug Bounty what to do. No response. So here I am with a with a major internet software 0day that nobody cares to move forward. Welcome to 2014.
5
30
96
@GuidoVranken
Guido Vranken
2 years
Just tried fuzzing the certificate parser of OpenSSL from 2003. It takes 1/10th of a second to find an out-of-bounds read (that's without a seed corpus).
Tweet media one
@GuidoVranken
Guido Vranken
2 years
@thedavidbrumley OpenSSL must have been a swiss cheese in 2003! Before ASLR in Linux too. Great strides have been made since.
0
0
1
1
18
89
@GuidoVranken
Guido Vranken
2 years
The fix for this introduced a (probably remote?) memory corruption bug in the latest OpenSSL release.
@GuidoVranken
Guido Vranken
2 years
x64 modular exponentiation bug in OpenSSL and BoringSSL introduced in 2013
2
11
63
2
29
82
@GuidoVranken
Guido Vranken
2 years
Recently found a consensus bug in the Besu Ethereum client. Certain bytecode could cause an exception which causes the tx not to finalize. Finding it was as simple as downloading the public OSS-Fuzz corpus for Geth and running it on Besu.
3
6
75
@GuidoVranken
Guido Vranken
3 years
Found a new bug 🥳
@go_ethereum
Go Ethereum
3 years
PSA: On Tuesday Aug 24th, Geth will issue a hotfix to a high severity security issue. Please make any necessary preparations to upgrade to the upcoming release (v.1.10.8). #ethereum #geth
89
164
334
5
11
70
@GuidoVranken
Guido Vranken
4 years
HackerOne also continues to "manage" the Squid bounty program, promising big bounties but never paying. My report was triaged 8 months ago. This is fraud and I will reporting HackerOne to the Federal Trade Commission if this is not resolved by next week.
Tweet media one
2
11
69
@GuidoVranken
Guido Vranken
4 years
The buffer overflow by @taviso made the headlines but here are some other recent bugs in libgcrypt found by Cryptofuzz: - Mod/InvMod was broken (T5269, fixed in 1.9.1) - ECDSA verifies with invalid pubkey (T5282) - OOB read via scrypt, at least valgrind says so (just reported)
0
19
68
@GuidoVranken
Guido Vranken
3 years
The jury is still out on my bounty for the Geth bug.. How about a milly? 😂
@josephdelong
joseph.eth
3 years
Sushi has paid a bounty of $1M in USDC to @samczsun for his assistance in discovering and mitigating a Miso vulnerability.
68
207
2K
6
8
64
@GuidoVranken
Guido Vranken
6 years
VrankenFuzz – a multi-sensor, multi-generator mutational fuzz testing engine
0
21
64
@GuidoVranken
Guido Vranken
2 years
x64 modular exponentiation bug in OpenSSL and BoringSSL introduced in 2013
2
11
63
@GuidoVranken
Guido Vranken
4 years
I "found" this bug a few weeks ago by just downloading and running OpenSSL OSS-Fuzz binaries + corpora (see dates in screenshot). Didn't report because I assumed OSS-Fuzz would have caught it.. Didn't it..?
Tweet media one
@GHSecurityLab
GitHub Security Lab
4 years
GHSL-2020-56: Double free in OpenSSL client
2
28
91
1
9
58
@GuidoVranken
Guido Vranken
3 years
I'm working on a machine-readable fuzzing corpora directory. I will add docs (+ a script which fetches corpora) later but I think so far it's pretty self-explanatory. Please add entries if you can, this benefits everyone.
39
18
61
@GuidoVranken
Guido Vranken
3 years
Report 2 memory bugs to a "managed" program on BugCrowd complete with poc, build script, stack trace, references.. Get this back for both. God knows how many bugs BugCrowd are hiding from the companies for whom they are managing 😂
Tweet media one
14
3
58
@GuidoVranken
Guido Vranken
4 years
V8 crasher function f(){}var a=f;for(var b=0;b<100000;++b){a=a.bind();Object.defineProperty(a,Symbol.hasInstance,{})}({})instanceof a;
2
15
55
@GuidoVranken
Guido Vranken
1 year
EVM fuzzers
Tweet media one
0
3
54
@GuidoVranken
Guido Vranken
6 years
Multi-arch instruction-level differential fuzzing with libFuzzer, Unicorn and Capstone. Also detects use of uninitialized memory. I want to subject OpenSSL's multiple implementations of the same functions (in C, optimized asm across multiple archs) to this.
Tweet media one
3
12
55
@GuidoVranken
Guido Vranken
5 years
OpenWRT RCE via MITM/compromised DNS 🔥
Tweet media one
3
15
52
@GuidoVranken
Guido Vranken
2 years
You have: - A complex software program, source code available - Insane compute resources - Limited human time (to write harnesses and poke around etc) What would be your general approach to find as many vulnerabilities as possible?
13
12
53
@GuidoVranken
Guido Vranken
2 years
I was looking into this and found a new Geth consensus bug (kind of, but don't worry Ethereum is safe, it only affects an unused configuration)
@Optimism
Optimism
2 years
Cannon (CANNON CANNON CANNON) is our next-gen fault proof architecture, and it’s coming soon. It enables optimal data costs. It effortlessly preserves EVM equivalence. Its very first bug bounty goes live today. 💥
11
64
296
1
7
51
@GuidoVranken
Guido Vranken
6 years
This is one EOS bug I found. Unbounded recursion in Binaryen WASM parsing (GDB backtrace: )
6
5
50
@GuidoVranken
Guido Vranken
3 years
RustCrypto, which is a a suite of primitives widely used throughout the Rust ecosystem, is being fuzzed on OSS-Fuzz. Other than finding that some hashes like Groestl are a little slow with large inputs no bugs have been detected. Very high quality code.
2
7
49
@GuidoVranken
Guido Vranken
5 years
Within a few days I will publicly disclose a Monero "bleed" bug that leaks process memory to the network. Reported and acknowledged 6 months ago, but not yet fixed, though a new release, incorporating the fix, is supposedly planned for the near future.
6
5
46
@GuidoVranken
Guido Vranken
3 years
Today there will be the coordinated disclosure of a crypto implementation bug that has gone unnoticed for many years. The impact is probably very limited but it's interesting nonetheless.
2
7
43
@GuidoVranken
Guido Vranken
11 months
Another impossible fuzzing puzzle: if (v * v * v == 1881672302290562263) abort(); where v is uint64_t doesn't finish in 60000000000 iters. Solution is 1234567, Z3 solves it instantly.
@GuidoVranken
Guido Vranken
11 months
simple_api_fuzzer -jobs=120 -use_value_profile=1 -max_len=256 -focus_function=BuildHuffmanTable on the most recent public corpus doesn't find it, at least not quickly. Using libwebp-address-202308310602, which is vulnerable (bad.webp triggers it).
0
0
30
4
1
44
@GuidoVranken
Guido Vranken
3 years
Hopefully this will catch a bug or two in other libraries as well. The lesson learned is that some bugs can be quite elusive even when targeted with countless CPU hours of purpose-built fuzzing.
1
0
41
@GuidoVranken
Guido Vranken
3 years
I'm writing a Solidity to C++ converter by parsing Solidity JSON AST output so I can fuzz smart contracts like I fuzz OpenSSL. It's fairly straightforward because the languages are quite similar, only minor AST rewrites are required to offer most Solidity functionality in C++.
3
4
43
@GuidoVranken
Guido Vranken
2 years
🎉
Tweet media one
2
2
43
@GuidoVranken
Guido Vranken
2 years
I added Z3 support to Cryptofuzz to compute inputs to calculation operations yielding a specific result. Inspired by a bug in a smart contract function which computes ceil(A*B/C). If A*B/C==2^256-1 and A*B%C!=0 then it would incorrectly overflow the result from 2^256-1 to 0.
2
4
41
@GuidoVranken
Guido Vranken
3 years
I thought I had found a Solidity bug with differential fuzzing between optimization levels. function f() public {assembly {mstore(and(keccak256(0,18446744057039951614),0), 123)}}
1
3
41
@GuidoVranken
Guido Vranken
3 years
A new optimized, extensively documented uint256 lib for Golang by Decred.
0
9
39
@GuidoVranken
Guido Vranken
4 years
The cereal fuzzers can be found in (and built with) this repository: I spent a lot of time on this and it is one of my most elaborate harnesses to date.
0
9
40
@GuidoVranken
Guido Vranken
2 years
Inverse modulo bug in libgcrypt since at least 2004
3
4
39
@GuidoVranken
Guido Vranken
1 year
I have a DoS (slow execution) bug which affects most EVMs. If you're an EVM maintainer and slow contract execution is a concern to you, please reach out (e-mail in bio) and I'll notify you before I'll publish a blog post about the bug later this week.
2
9
36
@GuidoVranken
Guido Vranken
1 year
I've spent hundreds of hours and CPU-decades of fuzzing on the Geth EVM. I did find some bugs along the way but at this point it's simply impeccable as far as I can tell.
@evan_van_ness
Evan Van Ness 🧉
1 year
@superphiz Geth is the most hardened piece of software in blockchain. Many blockchains are literally just Geth forks But running majority clients is bad for the safety and value of your precious ETH
2
1
14
0
1
37
@GuidoVranken
Guido Vranken
2 years
@realGeorgeHotz @Austen Don't get rid of verbatim search, for me the usefulness of a search engine is the extent to which it resembles grep and avoids trying to be clever. (I don't see the problem in the first place, just don't make typo's or use autocorrect?)
5
1
32
@GuidoVranken
Guido Vranken
10 months
This was found by fuzzing the Nimbus EVM (which uses libtommath for the modexp precompile) vs. Geth and observing that their states diverged
@GuidoVranken
Guido Vranken
11 months
Modular exponentiation bug in libtommath, undiscovered since 2004, not yet fixed.
0
2
27
0
2
35
@GuidoVranken
Guido Vranken
4 years
For @wolfSSL I've written a Cryptofuzz module that tests their cryptography API. 7000 lines of harnessing code. I honestly can't think of any software that is fuzzed so deeply.
0
5
34
@GuidoVranken
Guido Vranken
3 years
@killa @the_secret_club @floesen_ @Hacker0x01 I'm also still waiting for a reward in another H1 program for a bug reported in Jan. 2020 ("managed by HackerOne") H1 consistently continues to run programs which take the bugs but never pay. That's clearly fraud and I suggest reporting them to the Federal Trade Commission @FTC
0
1
31
@GuidoVranken
Guido Vranken
4 years
Fuzzing tip: Use mutators to route symmetrical operations. Eg. Cryptofuzz reuses ECDSA Sign output as input to ECDSA Verify via the mutator and this is extremely effective, because EC crypto expects proper input (valid keys, signatures), and randomly generated data doesn't cut it
0
4
32
@GuidoVranken
Guido Vranken
3 years
So in my custom mutator (which is already strongly optimized to construct meaningful inputs to math/crypto functions) I added a feature which mutates values in the Montgomery domain and this helps a lot because the bug is now found within minutes.
1
1
29
@GuidoVranken
Guido Vranken
11 months
simple_api_fuzzer -jobs=120 -use_value_profile=1 -max_len=256 -focus_function=BuildHuffmanTable on the most recent public corpus doesn't find it, at least not quickly. Using libwebp-address-202308310602, which is vulnerable (bad.webp triggers it).
@benhawkes
Ben Hawkes
11 months
"The WebP 0day" -- a full technical analysis the recently patched vulnerability in the WebP image library that was exploited in the wild (CVE-2023-4863).
15
336
839
0
0
30
@GuidoVranken
Guido Vranken
3 years
It's great that Google does this. As far as I'm aware there is no company investing so heavily in the security of general-purpose FOSS as Google. And a nice consequence of their crowd-sourcing is that anyone can make some extra cash regardless of their credentials or background.
@pwningsystems
Jordy Zomer
3 years
@vegard_no Note: Google VRP is paying generously for linux kernel patches, even patches that are already found by their syzkaller instance! Wanna earn a quick buck? Go fix some of the bugs! :)
1
5
23
1
4
30
@GuidoVranken
Guido Vranken
3 years
@brewster_kahle @internetarchive I think it's not a matter of if but when the IA will be stricken by catastrophe (The Big One, fire, litigation, ..). IA should offer its whole public archive in chunks of 1TB torrents to ensure survival of data.
3
0
28
@GuidoVranken
Guido Vranken
2 years
The subtraction mechanism involved in the OpenSSL vulnerability is interesting because you can use it to subtract a pointer delta from a existing function pointer to set it to a different function. The following prints 'bad' 25% of the time with ASLR enabled.
Tweet media one
1
3
30
@GuidoVranken
Guido Vranken
4 years
I've been testing Stanford Javascript Crypto Library () (5600+ Github stars) with Cryptofuzz. Observed wrong output for: PBKDF2+SHA1/SHA512/RIPEMD160 (but SHA256 is OK), bignum subtract if result is negative, scrypt with certain parameters, RIPEMD160 HMAC.
3
5
28
@GuidoVranken
Guido Vranken
3 years
Serious bug in Nettle's ecdsa_verify Found by Cryptofuzz running on OSS-Fuzz
0
8
29
@GuidoVranken
Guido Vranken
4 years
The raw memory of an (initialized!) long double type contains uninitialized bytes. Try: long double v=0;for(int i=0;i<sizeof(v);i++)printf("%02X",*(((unsigned char*)&v)+i)); This can affect serialization eg. in Cereal:
4
2
30
@GuidoVranken
Guido Vranken
2 years
I wonder if the nature of OpenSSL vuln can be figured out ahead of its disclosure using git kung fu based on these confirmed constraints: - OpenSSL 1.1.1[a-q] are not affected - LibreSSL and BoringSSL are not affected - OpenSSL 3.0.0 through 3.0.6 are affected
2
3
27
@GuidoVranken
Guido Vranken
3 years
Out of 499 OSS-Fuzz projects I surveyed, only 30 use custom mutators, and 9 of those are mine. They don't make sense for every project, but they can be quite helpful and even essential if the format is particularly strict (valid checksums, source code parsing, signatures).
2
1
29
@GuidoVranken
Guido Vranken
3 years
Fuzzer for Uniswap/SushiSwap/OpenZeppelin math No bugs so no milly for me 😭
0
6
28
@GuidoVranken
Guido Vranken
10 months
What Z3 can't do: solve A^3 + B^3 + C^3 = {114, 390, 627, 633, 732, 921, 975}. This is an open problem.
@GuidoVranken
Guido Vranken
11 months
Another impossible fuzzing puzzle: if (v * v * v == 1881672302290562263) abort(); where v is uint64_t doesn't finish in 60000000000 iters. Solution is 1234567, Z3 solves it instantly.
4
1
44
0
0
21
@GuidoVranken
Guido Vranken
3 years
Running all OSS-Fuzz fuzzers on their latest corpus while logging file and network access could lead to interesting finds. strace -e trace=file,network -o trace.txt ./fuzzer corpus/ -runs=1
@fhenneke
Fabian Meumertzheim
3 years
Hindsight is 20/20, but with a hook on javax.naming.Context #lookup and a generally useful improvement to the Map instrumentation, Jazzer reliably finds #log4j CVE-2021-44228 in ~5 min with a one-line fuzz target: log.error(data.consumeRemainingAsString());
Tweet media one
1
12
63
0
10
28
@GuidoVranken
Guido Vranken
2 years
Fuzzer for arkworks crates, used by @EspressoSys , @penumbrazone and others, now running on OSS-Fuzz. No bugs found during high-intensity fuzzing, harness currently only tests prime field math and point ops g1/g2 + * -, but it's a good start.
1
8
28
@GuidoVranken
Guido Vranken
5 years
Because Squid maintainers and the Internet Bug Bounty are completely unresponsive, I've decided to publish the patch for the Squid remote buffer overflow, so people can patch ahead of an official release, whenever that may happen.
1
12
27
@GuidoVranken
Guido Vranken
4 years
Mozilla NSS CVE-2020-12403: ChaCha20, ChaCha20/Poly1305 OOB read, OOB write, incorrect output with multi-part updating or small AEAD tag. Found with Cryptofuzz.
1
4
26
@GuidoVranken
Guido Vranken
3 years
V8 BigInt fuzzer. Easily the most error-prone bignum API I've ever used; I had to slalom between a quite a few overflows before getting everything right (see comments in module.cpp). But I guess it's OK since it's only an internal API (?).
1
6
26
@GuidoVranken
Guido Vranken
4 months
For a client I am looking for an auditor with good familiarity with BLS12-381, Rust, and preferably fuzzing. I had to forgo this opportunity for personal reasons but I want to connect my client with a good replacement. Please get in touch if you are or know someone who is keen.
6
7
26
@GuidoVranken
Guido Vranken
2 years
> run the test suite under valgrind > collect $100K bug bounty
@veorq
JP Aumasson
2 years
laziest way to find bugs: > compile > read the warnings
9
13
77
3
1
26
@GuidoVranken
Guido Vranken
3 years
blst BLS12-381 signature library (used by Ethereum 2.0) security advisory Other bugs: - uninitialized branching with non-standard domain separation tag - invmod hang on i386 if input is 0 or modulo - NULL ptr dereference Found with Cryptofuzz
1
4
26
@GuidoVranken
Guido Vranken
2 years
Now trying this to find slow inputs in OpenSSL server. 'cu' is the cycle delta (and the fuzzer feedback signal). Notice the exec/s quickly decreasing.
Tweet media one
@hashbreaker
Daniel J. Bernstein
2 years
Releasing #libcpucycles library to count CPU cycles: Supports counters for amd64 (both PMC and TSC), arm32, arm64 (both PMC and VCT), mips64, ppc32, ppc64, riscv32, riscv64, sparc64, and x86, plus automatic fallbacks to various OS-level timing mechanisms.
2
29
121
3
0
25
@GuidoVranken
Guido Vranken
6 years
OpenSSL mega crypto fuzzer: all (15) digests + all (144) sym. ciphers encryption+decryption (via EVP and BIO), HMAC + all digests, CMAC + all sym. ciphers, KDFs (SCRYPT + HKDF + TLS1 PRF) and then some. Project goal is mega crypto differential fuzzing @ Google oss-fuzz.
Tweet media one
0
6
24
@GuidoVranken
Guido Vranken
3 years
I've been doing a little fuzzing of EOS smart contracts (which are written in C++) with great results (as you'd expect from fuzzing) and as a side effect found a few bugs in the EOSIO Contract Development Toolkit as well.
2
0
23
@GuidoVranken
Guido Vranken
5 years
Steadily finding more cryptography implementation bugs.
Tweet media one
2
4
23
@GuidoVranken
Guido Vranken
2 years
Found an OpenSSL client DoS, kind of. <200KB of input keeps the client busy for minutes by having it invoke the DH keygen over and over. Here's a script that generates an input for OpenSSL's client fuzzer:
2
9
23
@GuidoVranken
Guido Vranken
10 months
There's this keccak implementation going around with a nasty limitation, for no good reason
Tweet media one
2
0
14
@GuidoVranken
Guido Vranken
3 years
For good measure I found and reported a few bugs in py-evm as well (not used in production, but in scope for the Eth bounty program). Once you've done all the legwork it becomes pretty easy. We're excited to do more EVM audits. Get in touch: evm @sentnl .io
2
5
22
@GuidoVranken
Guido Vranken
3 years
Here's the harness: To build, run from this branch: infra/helper.py build_fuzzers skale First Solidity fuzzer on OSS-Fuzz
@GuidoVranken
Guido Vranken
3 years
For @SkaleNetwork I'm doing some fuzzing of their cryptography implemented in Solidity. Specifically BLS signature operations and some other math.
1
0
19
0
5
23
@GuidoVranken
Guido Vranken
3 years
A Windows kernel memory bug was considered not in scope for vague reasons. The Squid bug bounty program promises up to $32K per bug, but they stop responding after you've done your work, and they've never paid out a penny to anyone. Bug bounties these days suck.
2
4
22