Package: yersinia
Version: 0.7.2+svn48+ntohl-1
Severity: important
Tags: patch upstream
yersinia gets stuck in a tight loop when keyboard interaction is
required, ie, calling the ncurses interface (-I) or using the CLI for
attacks that are stopped by pressing a key.
It occurs since non network interfaces are return by pcap_findalldevs,
like nflog or usbmon1. The function interface_init_data() fails but
the return code is not tested in interface_init(). It seems that stdin
is closed and file descriptor 0 reused for a socket.
The attached patch excludes "nflog" and "usbmonX" devices in addition
to "any" and the loopback.
To reproduce the problem:
# yersinia stp -interface eth0 -version 3 -attack 4
<*> Starting NONDOS attack Claiming Root Role...
<*> Press any key to stop the attack <*>
the last process has to be killed to stop.
On wheezy (kernel 3.2) where nflog exists the file descriptors are as
follows:
# ls -l /proc/22428/fd/
total 0
lrwx------ 1 root root 64 nov. 29 18:45 0 -> socket:[48001]
lrwx------ 1 root root 64 nov. 29 18:45 1 -> /dev/pts/1
lrwx------ 1 root root 64 nov. 29 18:45 2 -> /dev/pts/1
lrwx------ 1 root root 64 nov. 29 18:45 3 -> /tmp/yersinia.log
lrwx------ 1 root root 64 nov. 29 18:45 4 -> socket:[48004]
=== messages found in yersinia.log
eth0 iflinkname EN10MB
eth0 iflinkdesc Ethernet
eth0 MAC = 0002.55ee.9b5b
nflog iflinkname NFLOG
nflog iflinkdesc Linux netfilter
libnet_init failed on nflog -> libnet_check_iface() ioctl: No such
device
th_tty_peer thread = -1250792592...
th_uptime thread = -1242399888
eth0 libnet_handler 921EEE8
Entering command line mode...
attack_launch: -1250792592 Attack thread -1261921424 is born!!
TERM signal received from -1234003360!
g00dbye function called from -1234003360
====
The same command run on squeeze works correctly, file descriptors as
normal:
# ls -l /proc/9319/fd
total 0
lrwx------ 1 root root 64 29 nov. 18:36 0 -> /dev/pts/1
lrwx------ 1 root root 64 29 nov. 18:36 1 -> /dev/pts/1
lrwx------ 1 root root 64 29 nov. 18:36 2 -> /dev/pts/1
lrwx------ 1 root root 64 29 nov. 18:36 3 -> /tmp/yersinia.log
lrwx------ 1 root root 64 29 nov. 18:36 4 -> socket:[7997751]
lrwx------ 1 root root 64 29 nov. 18:36 5 -> socket:[7997754]
l-wx------ 1 root root 64 29 nov. 18:36 7 -> pipe:[7959155]
-- System Information:
Debian Release: wheezy/sid
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'testing'), (100,
'stable')
Architecture: i386 (i686)
Kernel: Linux 3.2.0-4-686-pae (SMP w/4 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages yersinia depends on:
ii libatk1.0-0 2.4.0-2
ii libc6 2.13-35
ii libcairo2 1.12.2-2
ii libfontconfig1 2.9.0-7
ii libfreetype6 2.4.9-1
ii libglib2.0-0 2.33.12+really2.32.4-3
ii libgtk2.0-0 2.24.10-2
ii libncurses5 5.9-10
ii libnet1 1.1.4-2.1
ii libpango1.0-0 1.30.0-1
ii libpcap0.8 1.3.0-1
yersinia recommends no packages.
yersinia suggests no packages.
-- no debconf information
Thanks,
--
Michel Casabona
--- interfaces.c-orig 2008-06-06 08:02:13.000000000 +0200
+++ interfaces.c 2012-11-29 20:12:23.157187558 +0100
@@ -145,7 +145,9 @@
while (index)
{
- if ( (strncmp(index->name,"any",strlen(index->name))) &&
+ if ( (strncmp(index->name,"any",strlen(index->name)) != 0) &&
+ (strncmp(index->name,"nflog",strlen(index->name)) != 0) &&
+ (strncmp(index->name,"usbmon",strlen("usbmon")) != 0) &&
(index->flags != PCAP_IF_LOOPBACK) )
{
if ((iface_data = (struct interface_data *) calloc(1, sizeof(struct interface_data))) == NULL) {