#fuzzer

danzindanzin
2026-01-12

Published my first PyPI package today, called lafleur.

is a specialized CPython JIT fuzzer that uses a coverage-guided, evolutionary approach. It executes test cases, observes their effect on the JIT's state by analyzing verbose trace logs, and uses that feedback to guide its mutations, becoming smarter at finding interesting code paths over time.

Let me know if you use it or have any questions.

pypi.org/project/lafleur/
github.com/devdanzin/lafleur

Advanced Fuzzing Leagueaflplusplus@infosec.exchange
2025-12-26

AFL++ 4.35c release! Complete hidden coverage gathering, GUIFuzz++ support, IJON for qemu, various fixes! github.com/AFLplusplus/AFLplus #fuzzing #fuzzer

danzindanzin
2025-12-15

There's a researcher, Jiang Yuancheng, who's doing a great work finding CPython crashes and memory leaks: github.com/python/cpython/issu

They've come up with a very clever idea for a new way of fuzzing, made a fine tool out of it, and are reaping great results.

Fuzzing can be a diminishing returns endeavor: you only have so many bugs to find. Their approach has shown itself to cover different areas and kinds of issues well, as shown by their track record.

2025-11-25

"Tạo công cụ kiểm thử AI Red Teaming cục bộ với Fuzzer và 280 Payloads để tránh đăng ký hàng tháng. Công cụ này bao gồm Mutation Fuzzer, Payloads thực tế và AI Judge. #AITools #RedTeaming #Fuzzer #AI #AnToànBảoMật #CôngCụKiểmThử"

reddit.com/r/LocalLLaMA/commen

danzindanzin
2025-11-23

It turns out that, by running it on an interpreter with ASan enabled, I was the culprit of my fuzzer lafleur using way too much memory.

That even led to me buying some DDR5 to be able to fuzz a bit more comfortably. Running without ASan reduces memory usage to 1/15. So I guess now I'll have some spare RAM, and less money, going forward :)

I'll enhance the JIT fuzzer to run on a different interpreter than the fuzzing scripts, which benefit from ASan.

danzindanzin
2025-10-27

So someone found a segfault in NumPy and reported it as a security bug: huntr.com/bounties/49928a2c-c6. After some back and forth, the NumPy developers agreed it was a security bug (with a low score, but still).

However, since fusil had already found that crash and I had reported it 2 months earlier (github.com/numpy/numpy/issues/), the report was deemed a duplicate and no CVE was assigned.

We didn't find a CVE, but avoided one :)

Link to fix: github.com/numpy/numpy/pull/30

danzindanzin
2025-10-27

Fuzzing pyhacl (codeberg.org/drlazor8/pyhacl), a package of Cython bindings for HACL* (the High Assurance Cryptographic Library), with fusil we only found one crash.

It turned out to actually be a silly bug in :

Issue: github.com/cython/cython/issue

Fix: github.com/cython/cython/pull/

Goes to show how fuzzing a C-extension can uncover crashes in many different layers.

Thanks @drlazor8 for taking up the call for C-extensions maintainers to fuzz their code.

danzindanzin
2025-10-26

After a pause, we're back to running fusil. This time, to fuzz cereggii, a package of very interesting thread synchronization utilities for , made of C-extensions.

We tailored to target these utilities, finding more issues.

Daniele Parmeggiani (dpdani), the maintainer, has been helping in the effort and being very supportive. That's the best welcome fusil has received in any project :)

Here are the issues we found: github.com/dpdani/cereggii/iss

danzindanzin
2025-10-25

Been running a fusil campaign for a week, targeting a C-extension. The fuzzer has found 9 issues so far, feels good.

The maintainer is helping with the campaign and eager to fix the issues, which is great.

Some maintainers see us with suspicion and often disregard issues, as if we're after accolades, pointing fingers or complaining about the code.

We fuzz to help, that's all.

Anyway, if you have a C-extension and would like it fuzzed, hit me up :)

2025-10-19

I ran the #ELF #parser of #sydbox over 60k #Linux #malware samples from #Virusshare and 40k orcs which are malformed elves generated by the Melkor ELF #Fuzzer and got no crashes. The parser is written in #rustlang. It's free from unsafe code and arithmetic side effects. Syd parses ELF at exec(3) and mmap(2) boundary to perform various restrictions for binaries such as PIE and non-executable stack. #exherbo #security

danzindanzin
2025-10-13

lafleur, the CPython JIT fuzzer, now can compare timings for running a piece of code with JIT on and off.

The idea is that if the run with JIT on is much slower that with JIT off, we have found a performance bug.

Brandt Bucher suggested this mode. It took a while to get started on it, but it was simple to implement on top of Differential Mode.

So many modes, so little compute available...

Screen shot of an abridged log of lafleur running, displaying the new messages for the timing fuzzing mode:
[TIMING] Running timed trial with JIT=False.
[TIMING] Running timed trial with JIT=True.
  [~] Timing slowdown ratio (JIT/non-JIT) is 0.881.

The screen shot has a dark gray background and the text is a mix of white, green, red, purple and yellow, in a mess of coloring because the text editor identified this content as a Python script.

Full text of the image is:
--- Fuzzing Session #226 ---
[+] Calculating corpus scores for parent selection...
[+] Selected parent for BREADTH session: 523.py (Score: 248.51)
[...]
[TIMING] Running timed trial with JIT=False.
[TIMING] Running timed trial with JIT=True.
[NEW RELATIVE EDGE] '('EXECUTING', '_START_OF_HARNESS_->_SET_IP')' in harness 'f1'
  [~] Timing slowdown ratio (JIT/non-JIT) is 0.881.
danzindanzin
2025-10-11

Differential Mode has just landed in lafleur, the CPython JIT fuzzer. It runs the same code with and without the JIT, compares the result, and flags any discrepancies.

It does this while mutating the code in a feedback-guided loop, so it evolves the fuzzing scripts trying to find one where the JIT gives wrong results.

This is actually the 2nd time this feature is implemented (now better and more robust): it used to work, broke, and now is back.

Dr PenDrPen
2025-10-11

The ActivityPub Fuzzer. Probably important if you're a fediverse app dev or other feditech person. It seems interesting.

asml.cyber.harvard.edu/2025/10

Advanced Fuzzing Leagueaflplusplus@infosec.exchange
2025-10-01

AFL++ v4.34c release - IJON support, UnicornAFL v3, LLVM 22 support, enhanced CMPLOG, bug fixes :-) github.com/AFLplusplus/AFLplus #afl #fuzzing #fuzzer

danzindanzin
2025-08-31

Posted a topic about lafleur, the CPython JIT fuzzer I'm developing: discuss.python.org/t/introduci

It has many details about the project, the results (4 JIT crashes so far), calls for help and ideas for the future.

If any of this interests you, please give a read. Boosts welcome :)

danzindanzin
2025-08-16

Preparing a post about lafleur, the CPython JIT fuzzer I develop.

It has found 4 JIT crashes so far:
#136996: "JIT: `executor->vm_data.valid` assertion failure in `unlink_executor`".
#137007: "JIT: assertion failure in _PyObject_GC_UNTRACK".
#137728: "Assertion failure or `SystemError` in `_PyEval_EvalFrameDefault` in a JIT build".
#137762: "Assertion failure in `optimize_uops` in a JIT build".

Contributions welcome!

github.com/search?q=repo%3Apyt

danzindanzin
2025-07-29

Here's how lafleur works:

Starts from a corpus of seed files (generated by fusi)l. It runs each file and parses the JIT debug output to record micro ops (UOPs) and edges between them.

Then it applies mutations to these files and when a mutation results in a new UOP or edge, it adds the mutated file to the corpus.

All the while, it monitors the execution of these files for crashes.

And it's smart about which file to mutate next.

Simple, eh?

danzindanzin
2025-07-29

One obvious thing from fuzzing the CPython JIT with the lafleur fuzzer is that finding crashes is much lower probability than fuzzing CPython with fusil.

Whenever fusil found a crash, it would find hits for it again and again pretty quickly.

With lafleur, we only got 3 hits (2 issues) in thousands of fuzzing hours.

I'm throwing more compute at it, but maybe we'll need to improve the core ideas to get better results.

github.com/devdanzin/lafleur

danzindanzin
2025-07-24

Reviewed the 3 PRs we got for lafleur: github.com/devdanzin/lafleur/p

All 3 marked as "good first issue". They've clear signs of being created by or with help from AI, like tentative code ("# do this in case... ") and removing docstrings.

Merged one and gave feedback on 2, including tips on how to get AI to fix their issues.

I might get unfollows for this, but I welcome AI generated code as long as it's good enough. In fact, AI made this project viable.

danzindanzin
2025-07-22

Busy day, good day: the new CPython fuzzer lafleur found its first 2 crashes this morning!

Happiness only marred by the bad job I did reducing the testcases and making the reports reproducible. Thanks Brandt Bucher and and Ken Jin for the patience! Next bug reports will be more polished and reliable.

Also, we got 3 new PRs for the fuzzer but I didn't have time to review them, will have to leave that for tomorrow.

github.com/devdanzin/lafleur/

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst