Exploits for a heap overflow in MiniDLNA <=1.3.2 (CVE-2023-33476)# CVE-2023-33476
> ReadyMedia (MiniDLNA) versions from 1.1.15 up to 1.3.2 is vulnerable to Buffer Overflow. The vulnerability is caused by incorrect validation logic when handling HTTP requests using chunked transport encoding. This results in other code later using attacker-controlled chunk values that exceed the length of the allocated buffer, resulting in out-of-bounds read/write.
- [Root Cause Analysis](https://blog.coffinsec.com/0day/2023/05/31/minidlna-heap-overflow-rca.html)
- [Exploit Details](https://blog.coffinsec.com/0day/2023/06/19/minidlna-cve-2023-33476-exploits.html)
- [NIST CVE Entry](https://nvd.nist.gov/vuln/detail/CVE-2023-33476)
## exploits
- RCE via tcache poisoning+GOT overwrite exploit for x86-64 target
- RCE via tcache poisoning+RIP overwrite exploit for arm32 target (Netgear RAX30)
## fuzzing
- source code dir tweaked for fuzzing
- libfuzzer harnesses used to find the bug
## src
vulnerable source code that can be built to reproduce/test exploits
[4.0K] /data/pocs/55ce4132ac32148da8016565a944adfd0639e4a2
├── [4.0K] exploits
│ ├── [ 12K] helper.py
│ ├── [4.9K] rax30-qemu-reverse-shell.py
│ ├── [1.3K] README.md
│ ├── [ 9] requirements.txt
│ └── [4.8K] tpoison-nopie-x64_reverse-shell.py
├── [4.0K] fuzzing
│ └── [4.0K] minidlna-1.3.0
│ ├── [ 155] deps.sh
│ ├── [4.0K] fuzzers
│ │ ├── [3.5K] fuzz_harness.c
│ │ └── [1.4K] fuzz_http_libfuzzer.c
│ ├── [1.5K] http.dict
│ ├── [ 904] Makefile
│ ├── [4.0K] minidlna-1.3.0
│ │ ├── [8.6K] albumart.c
│ │ ├── [1010] albumart.h
│ │ ├── [ 48] AUTHORS
│ │ ├── [1.5K] autogen.sh
│ │ ├── [6.6K] avahi.c
│ │ ├── [ 257] avahi.h
│ │ ├── [ 0] ChangeLog
│ │ ├── [7.7K] clients.c
│ │ ├── [2.8K] clients.h
│ │ ├── [ 843] codelength.h
│ │ ├── [7.2K] compile
│ │ ├── [ 22K] configure.ac
│ │ ├── [5.8K] containers.c
│ │ ├── [1.2K] containers.h
│ │ ├── [ 18K] COPYING
│ │ ├── [1.0K] event.h
│ │ ├── [3.7M] fuzzer_http
│ │ ├── [ 10K] getifaddr.c
│ │ ├── [2.0K] getifaddr.h
│ │ ├── [304K] icons.c
│ │ ├── [ 21K] image_utils.c
│ │ ├── [1.5K] image_utils.h
│ │ ├── [5.8K] kqueue.c
│ │ ├── [6.5K] libav.h
│ │ ├── [1.4K] LICENCE.miniupnpd
│ │ ├── [4.0K] linux
│ │ │ ├── [3.3K] inotify.h
│ │ │ ├── [2.3K] inotify-syscalls.h
│ │ │ └── [1.6K] minidlna.init.d.script.tmpl
│ │ ├── [3.9K] log.c
│ │ ├── [1.6K] log.h
│ │ ├── [2.2K] Makefile.am
│ │ ├── [ 44K] metadata.c
│ │ ├── [3.1K] metadata.h
│ │ ├── [3.5K] minidlna.c
│ │ ├── [3.8K] minidlna.conf
│ │ ├── [6.1K] minidlna.conf.5
│ │ ├── [3.5K] minidlna.c.ORIG
│ │ ├── [2.0K] minidlnad.8
│ │ ├── [2.3K] minidlnapath.h
│ │ ├── [3.0K] minidlnatypes.h
│ │ ├── [ 23K] minissdp.c
│ │ ├── [2.0K] minissdp.h
│ │ ├── [4.8K] minixml.c
│ │ ├── [2.5K] minixml.h
│ │ ├── [ 18K] monitor.c
│ │ ├── [ 452] monitor.h
│ │ ├── [7.5K] monitor_kqueue.c
│ │ ├── [9.6K] NEWS
│ │ ├── [5.3K] options.c
│ │ ├── [3.7K] options.h
│ │ ├── [6.7K] playlist.c
│ │ ├── [ 968] playlist.h
│ │ ├── [4.0K] po
│ │ │ ├── [2.0K] da.po
│ │ │ ├── [2.6K] de.po
│ │ │ ├── [2.1K] es.po
│ │ │ ├── [2.1K] fr.po
│ │ │ ├── [2.2K] it.po
│ │ │ ├── [2.2K] ja.po
│ │ │ ├── [2.1K] ko.po
│ │ │ ├── [ 39] LINGUAS
│ │ │ ├── [1.8K] Makevars
│ │ │ ├── [2.3K] minidlna.pot
│ │ │ ├── [2.0K] nb.po
│ │ │ ├── [2.1K] nl.po
│ │ │ ├── [2.6K] pl.po
│ │ │ ├── [ 10] POTFILES.in
│ │ │ ├── [3.0K] ru.po
│ │ │ ├── [2.6K] sl.po
│ │ │ └── [2.0K] sv.po
│ │ ├── [4.5K] process.c
│ │ ├── [3.0K] process.h
│ │ ├── [ 917] README
│ │ ├── [ 30K] scanner.c
│ │ ├── [2.2K] scanner.h
│ │ ├── [2.7K] scanner_sqlite.h
│ │ ├── [4.2K] select.c
│ │ ├── [1.5K] sendfile.h
│ │ ├── [6.1K] sql.c
│ │ ├── [1.4K] sql.h
│ │ ├── [4.0K] tagutils
│ │ │ ├── [ 11K] tagutils-aac.c
│ │ │ ├── [1.2K] tagutils-aac.h
│ │ │ ├── [ 15K] tagutils-asf.c
│ │ │ ├── [ 10K] tagutils-asf.h
│ │ │ ├── [9.3K] tagutils.c
│ │ │ ├── [ 12K] tagutils-dff.c
│ │ │ ├── [1.0K] tagutils-dff.h
│ │ │ ├── [ 11K] tagutils-dsf.c
│ │ │ ├── [1.1K] tagutils-dsf.h
│ │ │ ├── [3.6K] tagutils-flc.c
│ │ │ ├── [1.1K] tagutils-flc.h
│ │ │ ├── [3.5K] tagutils.h
│ │ │ ├── [7.3K] tagutils-misc.c
│ │ │ ├── [ 17K] tagutils-mp3.c
│ │ │ ├── [2.6K] tagutils-mp3.h
│ │ │ ├── [ 12K] tagutils-ogg.c
│ │ │ ├── [1.1K] tagutils-ogg.h
│ │ │ ├── [1.7K] tagutils-pcm.c
│ │ │ ├── [1.0K] tagutils-pcm.h
│ │ │ ├── [3.8K] tagutils-plist.c
│ │ │ ├── [7.4K] tagutils-wav.c
│ │ │ └── [1.1K] tagutils-wav.h
│ │ ├── [3.9K] testupnpdescgen.c
│ │ ├── [8.4K] tivo_beacon.c
│ │ ├── [1.2K] tivo_beacon.h
│ │ ├── [ 21K] tivo_commands.c
│ │ ├── [ 930] tivo_commands.h
│ │ ├── [3.4K] tivo_utils.c
│ │ ├── [1.3K] tivo_utils.h
│ │ ├── [ 155] TODO
│ │ ├── [ 21K] upnpdescgen.c
│ │ ├── [3.2K] upnpdescgen.h
│ │ ├── [ 12K] upnpevents.c
│ │ ├── [2.9K] upnpevents.h
│ │ ├── [3.5K] upnpglobalvars.c
│ │ ├── [9.8K] upnpglobalvars.h
│ │ ├── [ 52K] upnphttp.c
│ │ ├── [5.3K] upnphttp.h
│ │ ├── [4.2K] upnpreplyparse.c
│ │ ├── [2.6K] upnpreplyparse.h
│ │ ├── [ 69K] upnpsoap.c
│ │ ├── [1.5K] upnpsoap.h
│ │ ├── [ 12K] utils.c
│ │ ├── [3.2K] utils.h
│ │ ├── [6.2K] uuid.c
│ │ └── [1.0K] uuid.h
│ ├── [498K] minidlna-1.3.0.tar
│ ├── [4.0K] patches
│ │ └── [1.8K] upnphttp-fix.patch
│ ├── [ 87] patch.sh
│ ├── [ 187] README.md
│ └── [1.6K] xml.dict
├── [ 992] README.md
└── [4.0K] src
├── [ 191] deps.sh
└── [4.0K] minidlna-git
├── [8.6K] albumart.c
├── [1010] albumart.h
├── [ 48] AUTHORS
├── [1.5K] autogen.sh
├── [6.6K] avahi.c
├── [ 257] avahi.h
├── [4.0K] buildroot
│ ├── [ 424] build-static.sh
│ ├── [ 60] Config.in
│ ├── [ 48] external.desc
│ ├── [ 67] external.mk
│ ├── [4.0K] readymedia
│ │ ├── [ 789] Config.in
│ │ └── [ 863] readymedia.mk
│ └── [1.3K] readymedia_defconfig
├── [ 0] ChangeLog
├── [8.1K] clients.c
├── [2.8K] clients.h
├── [ 843] codelength.h
├── [7.2K] compile
├── [ 22K] configure.ac
├── [5.8K] containers.c
├── [1.2K] containers.h
├── [ 18K] COPYING
├── [1.1K] event.h
├── [ 10K] getifaddr.c
├── [2.0K] getifaddr.h
├── [304K] icons.c
├── [ 21K] image_utils.c
├── [1.5K] image_utils.h
├── [5.6K] kqueue.c
├── [6.5K] libav.h
├── [1.4K] LICENCE.miniupnpd
├── [4.0K] linux
│ ├── [3.3K] inotify.h
│ ├── [2.3K] inotify-syscalls.h
│ └── [1.6K] minidlna.init.d.script.tmpl
├── [3.9K] log.c
├── [1.6K] log.h
├── [2.3K] Makefile.am
├── [ 45K] metadata.c
├── [3.1K] metadata.h
├── [ 35K] minidlna.c
├── [3.8K] minidlna.conf
├── [6.1K] minidlna.conf.5
├── [2.0K] minidlnad.8
├── [2.3K] minidlnapath.h
├── [3.0K] minidlnatypes.h
├── [ 23K] minissdp.c
├── [2.0K] minissdp.h
├── [4.8K] minixml.c
├── [2.5K] minixml.h
├── [ 10K] monitor.c
├── [ 442] monitor.h
├── [9.5K] monitor_inotify.c
├── [7.5K] monitor_kqueue.c
├── [ 10K] NEWS
├── [5.3K] options.c
├── [3.7K] options.h
├── [6.7K] playlist.c
├── [ 968] playlist.h
├── [4.0K] po
│ ├── [2.0K] da.po
│ ├── [2.6K] de.po
│ ├── [2.1K] es.po
│ ├── [2.1K] fr.po
│ ├── [2.2K] it.po
│ ├── [2.2K] ja.po
│ ├── [2.1K] ko.po
│ ├── [ 39] LINGUAS
│ ├── [1.8K] Makevars
│ ├── [2.3K] minidlna.pot
│ ├── [2.0K] nb.po
│ ├── [2.1K] nl.po
│ ├── [2.6K] pl.po
│ ├── [ 10] POTFILES.in
│ ├── [3.0K] ru.po
│ ├── [2.6K] sl.po
│ └── [2.0K] sv.po
├── [4.5K] process.c
├── [3.0K] process.h
├── [ 917] README
├── [ 30K] scanner.c
├── [2.2K] scanner.h
├── [2.7K] scanner_sqlite.h
├── [4.1K] select.c
├── [1.5K] sendfile.h
├── [6.1K] sql.c
├── [1.4K] sql.h
├── [4.0K] tagutils
│ ├── [ 11K] tagutils-aac.c
│ ├── [1.2K] tagutils-aac.h
│ ├── [ 15K] tagutils-asf.c
│ ├── [ 10K] tagutils-asf.h
│ ├── [9.3K] tagutils.c
│ ├── [ 12K] tagutils-dff.c
│ ├── [1.0K] tagutils-dff.h
│ ├── [ 11K] tagutils-dsf.c
│ ├── [1.1K] tagutils-dsf.h
│ ├── [3.7K] tagutils-flc.c
│ ├── [1.1K] tagutils-flc.h
│ ├── [3.5K] tagutils.h
│ ├── [8.3K] tagutils-misc.c
│ ├── [ 17K] tagutils-mp3.c
│ ├── [2.6K] tagutils-mp3.h
│ ├── [ 12K] tagutils-ogg.c
│ ├── [1.1K] tagutils-ogg.h
│ ├── [1.7K] tagutils-pcm.c
│ ├── [1.0K] tagutils-pcm.h
│ ├── [3.8K] tagutils-plist.c
│ ├── [7.4K] tagutils-wav.c
│ └── [1.1K] tagutils-wav.h
├── [3.9K] testupnpdescgen.c
├── [8.4K] tivo_beacon.c
├── [1.2K] tivo_beacon.h
├── [ 21K] tivo_commands.c
├── [ 930] tivo_commands.h
├── [3.4K] tivo_utils.c
├── [1.3K] tivo_utils.h
├── [ 155] TODO
├── [ 21K] upnpdescgen.c
├── [3.2K] upnpdescgen.h
├── [ 12K] upnpevents.c
├── [2.9K] upnpevents.h
├── [3.5K] upnpglobalvars.c
├── [9.9K] upnpglobalvars.h
├── [ 53K] upnphttp.c
├── [5.4K] upnphttp.h
├── [4.2K] upnpreplyparse.c
├── [2.6K] upnpreplyparse.h
├── [ 69K] upnpsoap.c
├── [1.5K] upnpsoap.h
├── [ 12K] utils.c
├── [3.2K] utils.h
├── [6.2K] uuid.c
└── [1.0K] uuid.h
16 directories, 273 files