deiv / driftnet

Driftnet watches network traffic, and picks out and displays JPEG and GIF images for display
GNU General Public License v2.0
433 stars 54 forks source link

Segmentation fault on iOS on web interface load #39

Closed asdfugil closed 2 years ago

asdfugil commented 2 years ago

When I try to connect to the web interface, it segfaults. iOS Version: 14.3 Invoked with: sudo driftnet -vpwZ mobile -i en0 libwebsockets version: 4.3.1 driftnet commit: e492335617cc1ad085e30a45b50fabe543471834 Configured with:

LDFLAGS="-Os -flto=thin -arch arm64 -isysroot /Users/nick/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.0.sdk -miphoneos-version-min=14.0 -L/Users/nick/Procursus/build_base/iphoneos-arm64/1700/usr/lib -L/Users/nick/Procursus/build_base/iphoneos-arm64/1700/usr/local/lib -F/Users/nick/Procursus/build_base/iphoneos-
arm64/1700/System/Library/Frameworks -F/Users/nick/Procursus/build_base/iphoneos-arm64/1700/Library/Frameworks -liosexec"

CFLAGS="-Os -flto=thin -arch arm64 -isysroot /Users/nick/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.0.sdk -miphoneos-version-min=14.0 -isystem /Users/nick/Procursus/build_base/iphoneos-arm64/1700/usr/include -isystem /Users/nick/Procursus/build_base/iphoneos-arm64/1700/usr/local/include -F/Users/nick/Procursus/build_base/iphoneos-arm64/1700/System/Library/Frameworks -F/Users/nick/Procursus/build_base/iphoneos-arm64/1700/Library/Frameworks"

./configure
        --build=x86_64-apple-darwin \
        --host=aarch64-apple-darwin \
        --prefix=/usr \
        --localstatedir=/var \
        --sysconfdir=/etc \
        --bindir=/usr/bin \
        --mandir=/usr/share/man \
        --enable-silent-rules \
        --disable-dependency-tracking \
        --enable-shared \
        --enable-static \
        --enable-http-display \
        --disable-display \
        ac_cv_func_malloc_0_nonnull=yes \
        ac_cv_func_realloc_0_nonnull=yes

Debugger output:

(lldb) process attach --name driftnet
Process 79687 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x00000001b410abf0 libsystem_kernel.dylib`__semwait_signal + 8
libsystem_kernel.dylib`__semwait_signal:
->  0x1b410abf0 <+8>:  b.lo   0x1b410ac0c               ; <+36>
    0x1b410abf4 <+12>: stp    x29, x30, [sp, #-0x10]!
    0x1b410abf8 <+16>: mov    x29, sp
    0x1b410abfc <+20>: bl     0x1b40e7f84               ; cerror
Target 0: (driftnet) stopped.

Executable module set to "/usr/bin/driftnet".
Architecture set to: arm64-apple-ios-.
(lldb) c
Process 79687 resuming
Process 79687 stopped
* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
    frame #0: 0x00000001026a9168 driftnet`ws_callback + 108
driftnet`ws_callback:
->  0x1026a9168 <+108>: ldr    x8, [x20, #0x18]
    0x1026a916c <+112>: str    x8, [x19]
    0x1026a9170 <+116>: str    x19, [x20, #0x18]
    0x1026a9174 <+120>: ldr    x0, [x20, #0x20]
Target 0: (driftnet) stopped.
(lldb) bt
* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
  * frame #0: 0x00000001026a9168 driftnet`ws_callback + 108
    frame #1: 0x000000010273c3a0 libwebsockets.19.dylib`___lldb_unnamed_symbol598$$libwebsockets.19.dylib + 132
    frame #2: 0x000000010273f38c libwebsockets.19.dylib`___lldb_unnamed_symbol617$$libwebsockets.19.dylib + 608
    frame #3: 0x000000010273fe4c libwebsockets.19.dylib`___lldb_unnamed_symbol619$$libwebsockets.19.dylib + 660
    frame #4: 0x000000010272ca88 libwebsockets.19.dylib`___lldb_unnamed_symbol512$$libwebsockets.19.dylib + 1156
    frame #5: 0x0000000102733364 libwebsockets.19.dylib`___lldb_unnamed_symbol541$$libwebsockets.19.dylib + 440
    frame #6: 0x0000000102733a48 libwebsockets.19.dylib`___lldb_unnamed_symbol543$$libwebsockets.19.dylib + 1188
    frame #7: 0x0000000102719b9c libwebsockets.19.dylib`lws_service_fd_tsi + 404
    frame #8: 0x00000001026ed280 libwebsockets.19.dylib`_lws_plat_service_forced_tsi + 140
    frame #9: 0x00000001026ed548 libwebsockets.19.dylib`_lws_plat_service_tsi + 596
    frame #10: 0x0000000102719c84 libwebsockets.19.dylib`lws_service + 108
    frame #11: 0x00000001026a94bc driftnet`___lldb_unnamed_symbol10$$driftnet + 204
    frame #12: 0x00000001d045db3c libsystem_pthread.dylib`_pthread_start + 288
(lldb) 

Output

mobile@iPad [139]:~$ sudo driftnet -vpwZ mobile -i en0
Mon Feb 28 17:49:57 2022 - info: listening on en0
Mon Feb 28 17:49:57 2022 - info: dropped privileges to user mobile
Mon Feb 28 17:49:57 2022 - info: using temporary file directory /var/tmp//driftnet-U9zHJb
Mon Feb 28 17:49:57 2022 - warning: http server initializated. go to http://localhost:9090
Mon Feb 28 17:49:58 2022 - info: new connection: 192.168.0.102:22 -> 192.168.0.106:43360
Mon Feb 28 17:49:58 2022 - info: new connection: 192.168.0.106:43360 -> 192.168.0.102:22
Mon Feb 28 17:49:58 2022 - info: new connection: 192.168.0.106:43362 -> 192.168.0.102:22
Mon Feb 28 17:49:58 2022 - info: new connection: 192.168.0.102:22 -> 192.168.0.106:43362
Mon Feb 28 17:50:05 2022 - info: new connection: 192.168.0.106:54112 -> 192.168.0.102:9090
Mon Feb 28 17:50:05 2022 - info: new connection: 192.168.0.102:9090 -> 192.168.0.106:54112
Segmentation fault: 11

Entitlements of driftnet:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>platform-application</key>
        <true/>
        <key>com.apple.private.security.no-container</key>
        <true/>
        <key>com.apple.private.skip-library-validation</key>
        <true/>
</dict>
</plist>

Additional crash log:

Date: 2/28/22, 6:25 PM
Process: driftnet
Bundle id: (null)
Device: iPad Pro, iOS 14.3

Exception type: EXC_BAD_ACCESS (SIGSEGV)
Exception subtype: KERN_INVALID_ADDRESS: 0x18
Exception codes: 0x0000000000000001, 0x0000000000000018
VM Protection: 0x18 is not in any region.

Triggered by thread: 1
Thread name: 
Call stack:
0   driftnet                        0x00000001026a9168 0x1026a0000 + 37224          // ws_callback
1   driftnet                        0x00000001026a913c 0x1026a0000 + 37180          // ws_callback
2   libwebsockets.19.dylib          0x000000010273c3a0 0x1026cc000 + 459680         // func_7031c
3   libwebsockets.19.dylib          0x000000010273f38c 0x1026cc000 + 471948         // func_7312c
4   libwebsockets.19.dylib          0x000000010273fe4c 0x1026cc000 + 474700         // func_73bb8
5   libwebsockets.19.dylib          0x000000010272ca88 0x1026cc000 + 395912         // func_60604
6   libwebsockets.19.dylib          0x0000000102733364 0x1026cc000 + 422756         // func_671ac
7   libwebsockets.19.dylib          0x0000000102733a48 0x1026cc000 + 424520         // func_675a4
8   libwebsockets.19.dylib          0x0000000102719b9c 0x1026cc000 + 318364         // lws_service_fd_tsi
9   libwebsockets.19.dylib          0x00000001026ed280 0x1026cc000 + 135808         // _lws_plat_service_forced_tsi
10  libwebsockets.19.dylib          0x00000001026ed548 0x1026cc000 + 136520         // _lws_plat_service_tsi
11  libwebsockets.19.dylib          0x0000000102719c84 0x1026cc000 + 318596         // lws_service
12  driftnet                        0x00000001026a94bc 0x1026a0000 + 38076          // func_1000093f0
13  libsystem_pthread.dylib         0x00000001d045db3c 0x1d0454000 + 39740          // _pthread_start
14  libsystem_pthread.dylib         0x00000001d0462880 0x1d0454000 + 59520          // thread_start

Register values:
PC: 0x0                 LR: 0x0                 CPSR: 0x0
x0: 0x0                 x1: 0x0                 x2: 0x0
x3: 0x0                 x4: 0x0                 x5: 0x0
x6: 0x0                 x7: 0x0                 x8: 0x0
x9: 0x0                 x10: 0x0                x11: 0x0
x12: 0x0                x13: 0x0                x14: 0x0
x15: 0x0                x16: 0x0                x17: 0x0
x18: 0x0                x19: 0x0                x20: 0x0
x21: 0x0                x22: 0x0                x23: 0x0
x24: 0x0                x25: 0x0                x26: 0x0
x27: 0x0                x28: 0x0

Loaded images:
0: /usr/bin/driftnet
1: /usr/lib/libiosexec.1.dylib
2: /usr/lib/libwebsockets.19.dylib
3: /usr/lib/dyld
4: /usr/lib/libssl.3.dylib
5: /usr/lib/libcrypto.3.dylib
6: /usr/lib/libbrotlienc.1.0.9.dylib
7: /usr/lib/libbrotlidec.1.0.9.dylib
8: /usr/lib/libuv.1.dylib
9: /usr/lib/libbrotlicommon.1.0.9.dylib
10: /usr/lib/system/libdispatch.dylib
11: /usr/lib/system/libdyld.dylib
12: /usr/lib/system/libsystem_info.dylib
13: /usr/lib/system/libsystem_c.dylib
14: /usr/lib/system/libsystem_malloc.dylib
15: /usr/lib/system/libsystem_networkextension.dylib
16: /usr/lib/libobjc.A.dylib
17: /usr/lib/libc++.1.dylib
18: /usr/lib/libc++abi.dylib
19: /usr/lib/system/libsystem_trace.dylib
20: /usr/lib/libsqlite3.dylib
21: /usr/lib/system/libsystem_notify.dylib
22: /usr/lib/system/libcorecrypto.dylib
23: /usr/lib/system/libsystem_asl.dylib
24: /usr/lib/system/libsystem_symptoms.dylib
25: /usr/lib/system/libsystem_kernel.dylib
26: /usr/lib/libSystem.B.dylib
27: /usr/lib/libpcap.A.dylib
28: /usr/lib/libz.1.dylib
29: /usr/lib/system/libcache.dylib
30: /usr/lib/system/libcommonCrypto.dylib
31: /usr/lib/system/libcompiler_rt.dylib
32: /usr/lib/system/libcopyfile.dylib
33: /usr/lib/system/liblaunch.dylib
34: /usr/lib/system/libmacho.dylib
35: /usr/lib/system/libremovefile.dylib
36: /usr/lib/system/libsystem_blocks.dylib
37: /usr/lib/system/libsystem_collections.dylib
38: /usr/lib/system/libsystem_configuration.dylib
39: /usr/lib/system/libsystem_containermanager.dylib
40: /usr/lib/system/libsystem_coreservices.dylib
41: /usr/lib/system/libsystem_darwin.dylib
42: /usr/lib/system/libsystem_dnssd.dylib
43: /usr/lib/system/libsystem_featureflags.dylib
44: /usr/lib/system/libsystem_m.dylib
45: /usr/lib/system/libsystem_platform.dylib
46: /usr/lib/system/libsystem_product_info_filter.dylib
47: /usr/lib/system/libsystem_pthread.dylib
48: /usr/lib/system/libsystem_sandbox.dylib
49: /usr/lib/system/libunwind.dylib
50: /usr/lib/system/libxpc.dylib

{"ProcessBundleID":"","ProcessName":"driftnet"}