Skip to main content

3 posts tagged with "security"

View All Tags

Building mdk4 for the Hak5 WiFi Pineapple Pager

· 6 min read
Roy Firestein
CEO at Autohost.ai

Complete guide for cross-compiling mdk4 for the Hak5 WiFi Pineapple Pager using the OpenWrt SDK.

Target Device Specifications

  • Device: Hak5 WiFi Pineapple Pager
  • CPU: 580 MHz MIPS 24KEc (MediaTek MT7628AN)
  • Architecture: mipsel_24kc (MIPS32r2, little-endian)
  • OS: Pineapple Pager 24.10.1 (based on OpenWrt 24.10.1)
  • Board: ramips/mt76x8
  • Kernel: Linux 6.6.86

Prerequisites

Build Host Requirements

This guide uses AWS Linux 2023 as the build host, but should work on any modern Linux distribution.

Install Build Dependencies

# Update package manager
sudo dnf update -y

# Install build essentials
sudo dnf install -y gcc make gcc-c++

# Install Perl modules (required by OpenWrt build system)
sudo dnf install -y perl-FindBin perl-Thread-Queue perl-IPC-Cmd

# Install additional build tools
sudo dnf install -y wget tar zstd file

Step 1: Download the OpenWrt SDK

Download the SDK matching your device's OpenWrt version and architecture.

# Navigate to home directory
cd ~

# Download OpenWrt SDK for ramips/mt76x8 (24.10.1)
wget https://downloads.openwrt.org/releases/24.10.1/targets/ramips/mt76x8/openwrt-sdk-24.10.1-ramips-mt76x8_gcc-13.3.0_musl.Linux-x86_64.tar.zst

# Extract the SDK (requires zstd)
tar --zstd -xf openwrt-sdk-24.10.1-ramips-mt76x8_gcc-13.3.0_musl.Linux-x86_64.tar.zst

# Navigate into SDK directory
cd openwrt-sdk-24.10.1-ramips-mt76x8_gcc-13.3.0_musl.Linux-x86_64

Note: If using a different OpenWrt version, find the matching SDK at: https://downloads.openwrt.org/releases/<version>/targets/<board>/<subtarget>/

Step 2: Install Required Dependencies

Install the libraries that mdk4 depends on.

# Update package feeds
./scripts/feeds update -a

# Install dependencies
./scripts/feeds install libnl-core libnl-genl libpcap

Step 3: Create mdk4 Package Directory

# Create package directory
mkdir -p package/mdk4

Step 4: Create Package Makefile

Create the OpenWrt package Makefile with proper configuration:

cat > package/mdk4/Makefile << 'EOF'
include $(TOPDIR)/rules.mk

PKG_NAME:=mdk4
PKG_VERSION:=4.2
PKG_RELEASE:=1

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/aircrack-ng/mdk4.git
PKG_SOURCE_VERSION:=master
PKG_MIRROR_HASH:=skip

PKG_LICENSE:=GPL-3.0-or-later
PKG_LICENSE_FILES:=COPYING

PKG_BUILD_PARALLEL:=1

include $(INCLUDE_DIR)/package.mk

define Package/mdk4
SECTION:=net
CATEGORY:=Network
DEPENDS:=+libnl-core +libnl-genl +libpcap +libpthread
TITLE:=MDK4 WiFi Testing Tool
URL:=https://github.com/aircrack-ng/mdk4
endef

define Package/mdk4/description
MDK4 is a Wi-Fi testing tool from E7mer, ASPj of k2wrlz,
it uses the osdep library from the aircrack-ng project
to inject frames on several operating systems.
endef

TARGET_CPPFLAGS += \
-I$(STAGING_DIR)/usr/include \
-I$(STAGING_DIR)/usr/include/libnl3

TARGET_LDFLAGS += \
-L$(STAGING_DIR)/usr/lib

MAKE_FLAGS += \
PREFIX=/usr \
LIBNL="-lnl-3 -lnl-genl-3"

define Package/mdk4/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mdk4 $(1)/usr/sbin/
endef

$(eval $(call BuildPackage,mdk4))
EOF

Key Points About the Makefile

Critical: The Makefile uses TARGET_CPPFLAGS += instead of overriding CFLAGS. This is essential because:

  • mdk4's internal build system adds -I.. in the osdep directory
  • Overriding CFLAGS breaks this, causing missing header errors
  • Using TARGET_CPPFLAGS += appends paths without breaking internal flags

Step 5: Install Package Dependencies

Before compiling, ensure all dependencies are built:

# Build dependencies
make package/libnl-core/compile V=s
make package/libnl-genl/compile V=s
make package/libpcap/compile V=s

Step 6: Compile mdk4

# Clean any previous builds (if recompiling)
rm -rf build_dir/target-*/mdk4*

# Compile mdk4 with verbose output
make package/mdk4/compile V=s

The compilation will take a few minutes. You should see:

  • Source code being downloaded from GitHub
  • Compilation of osdep library
  • Compilation of attack modules
  • Linking of final binary
  • Package creation

Step 7: Verify the Build

Check that the package was created successfully:

# Find the package
ls -lh bin/packages/mipsel_24kc/base/mdk4*.ipk

# Expected output:
# -rw-r--r-- 1 user user 53K <date> mdk4_4.2-r1_mipsel_24kc.ipk

Verify the binary architecture:

# Extract package to verify
cd /tmp
mkdir mdk4_test && cd mdk4_test
tar -xzf ~/openwrt-sdk-24.10.1-ramips-mt76x8_gcc-13.3.0_musl.Linux-x86_64/bin/packages/mipsel_24kc/base/mdk4_4.2-r1_mipsel_24kc.ipk
tar -xzf data.tar.gz
file ./usr/sbin/mdk4

# Expected output:
# ./usr/sbin/mdk4: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV),
# dynamically linked, interpreter /lib/ld-musl-mipsel-sf.so.1, no section header

Step 8: Deploy to WiFi Pineapple Pager

Copy Package from Build Server

# From your local machine, copy from the build server
scp -i ~/path/to/key.pem \
user@build-server:~/openwrt-sdk-24.10.1-ramips-mt76x8_gcc-13.3.0_musl.Linux-x86_64/bin/packages/mipsel_24kc/base/mdk4_4.2-r1_mipsel_24kc.ipk \
./

Transfer to Pineapple Pager

# Copy to device (adjust IP/hostname as needed)
scp mdk4_4.2-r1_mipsel_24kc.ipk root@pager:/tmp/

Install on Device

SSH into the Pineapple Pager:

ssh root@pager

Install the package:

# Navigate to package location
cd /tmp

# Install dependencies (if not already installed)
opkg update
opkg install libnl-core libnl-genl libpcap

# Install mdk4
opkg install mdk4_4.2-r1_mipsel_24kc.ipk

# Verify installation
which mdk4
mdk4 --version

Troubleshooting

Issue: Missing pcap.h or LINKTYPE errors

Symptoms:

error: 'LINKTYPE_IEEE802_11' undeclared
error: 'TCPDUMP_MAGIC' undeclared

Cause: The Makefile is completely overriding CFLAGS, breaking mdk4's internal include paths.

Solution: Use TARGET_CPPFLAGS += instead of CFLAGS= in the Makefile (already implemented in Step 4).

Issue: libnl errors

Symptoms:

error: netlink/genl/genl.h: No such file or directory

Solution: Install libnl dependencies:

./scripts/feeds install libnl-core libnl-genl
make package/libnl-core/compile V=s
make package/libnl-genl/compile V=s

Issue: libpcap errors

Symptoms:

undefined reference to 'pcap_*'

Solution: Install and compile libpcap:

./scripts/feeds install libpcap
make package/libpcap/compile V=s

Issue: Perl module errors

Symptoms:

Can't locate FindBin.pm

Solution: Install Perl modules:

# AWS Linux 2023 / Amazon Linux / Fedora
sudo dnf install -y perl-FindBin perl-Thread-Queue perl-IPC-Cmd

# Ubuntu / Debian
sudo apt install -y perl-base libfindbin-libs-perl

# Manual CPAN install (if packages unavailable)
sudo cpan FindBin Thread::Queue IPC::Cmd

Build Output Details

Files Created

  • Package: bin/packages/mipsel_24kc/base/mdk4_4.2-r1_mipsel_24kc.ipk (53KB)
  • Binary: usr/sbin/mdk4 (147KB stripped, inside package)

Binary Specifications

  • Format: ELF 32-bit LSB executable
  • Architecture: MIPS, MIPS32 rel2
  • Linking: Dynamically linked
  • Libc: musl (ld-musl-mipsel-sf.so.1)
  • Dependencies: libnl-3, libnl-genl-3, libpcap, libpthread

Additional Notes

Build Time

  • First build: ~5-10 minutes (includes downloading source)
  • Subsequent builds: ~2-3 minutes

Disk Space Requirements

  • OpenWrt SDK: ~1GB extracted
  • Build directory: ~200MB
  • Final package: 53KB

Alternative: Quick Rebuild

If you need to rebuild after making changes:

# Clean mdk4 only
rm -rf build_dir/target-*/mdk4*

# Rebuild
make package/mdk4/compile V=s

Using Different mdk4 Versions

To build a specific version instead of master:

Edit package/mdk4/Makefile and change:

PKG_SOURCE_VERSION:=master

To:

PKG_SOURCE_VERSION:=v4.2  # or specific commit hash

References

Building a Serverless Antivirus Scanner for S3 - A Journey from Lambda Layers to Container Images

· 18 min read
Roy Firestein
CEO at Autohost.ai

Ever tried to fit an elephant into a suitcase? That's what it felt like when we first attempted to create a serverless virus scanning solution for S3 uploads. Our journey took us through Lambda layers, container images, and some interesting discoveries about the limitations of serverless computing. Here's our story.

First AI Worm

· 3 min read
Roy Firestein
CEO at Autohost.ai

A new study by researchers at Cornell Tech and Intuit has revealed a concerning threat emerging from the rapid adoption of Generative AI (GenAI) capabilities into interconnected ecosystems of semi/fully autonomous agents. The paper introduces Morris II, the first worm designed to target these GenAI ecosystems through the use of adversarial self-replicating prompts.