This follow-up post has the details of the "Markov babbler": https://maurycyz.com/projects/trap_bots/
babble.c: In function ‘main’:
babble.c:651:40: error: passing argument 1 of ‘pthread_detach’ makes integer from pointer without a cast [-Wint-conversion]
651 | pthread_detach(&thread);
| ^~~~~~~
| |
| pthread_t * {aka long unsigned int *}
In file included from babble.c:77:
/usr/include/pthread.h:269:38: note: expected ‘pthread_t’ {aka ‘long unsigned int’} but argument is of type ‘pthread_t *’ {aka ‘long unsigned int *’}
269 | extern int pthread_detach (pthread_t __th) __THROW;
I assume the author is using a compiler that either doesn't show that warning by default, or doesn't error out on that warning by default. But I'm surprised the program doesn't crash (at the very least, I'm surprised it doesn't run out of memory eventually, as presumably libc can't actually detach those threads, and pthread_join() is never called).As this binary does a bunch of manual text parsing and string operations in C (including implementing a basic HTTP server), I'd recommend at the very least running it as an unprivileged user (which the author implicitly recommends via the provided systemd unit file) inside a container (which won't definitely save you, but is perhaps better than nothing).
The program also uses unsafe C functions like sprintf(). A quick look at one of the instances suggests that the use is indeed safe, but that sort of thing raises red flags for me as to the safety of the program as a whole.
And while it does process requests very quickly, it also appears to have no limit on the number of concurrent threads it will create to process each request, so... beware.