Insta360 Wave Firmware v1.1.6.6 - Deep Analysis Report
Firmware version: PSP_1.1.6.6 (SOC), MCU 0.1.3.3, BT 0.0.0.28, MODEL 2.0.0.1 Build date: November 28, 2025 Base OS: Buildroot 2020.02.1 (Linux kernel 5.4.242) SoC: Amlogic (likely A5/A113x2 family, based on code references) Internal codename: “PSP” (referenced throughout as pspapp, psp_tool, etc.)
1. FULL BOOT SEQUENCE
Section titled “1. FULL BOOT SEQUENCE”The boot process is BusyBox init driven via /etc/inittab:
-
Kernel init – mounts
/proc, creates/dev/shmand/dev/pts, remounts/read-only, mounts all from/etc/fstab, sets hostname (“buildroot”), configures loopback, injectsnameserver 8.8.8.8into/etc/resolv.conf -
Serial console – spawns a root shell on
ttyS0(respawn, no login required – see Security section) -
/etc/init.d/rcS– the master init script:- Sets LCD backlight to full brightness (255)
- S02overlayfs – Reads “deviceid” from Amlogic unifykeys to determine debug vs release mode. In debug mode, does a full pivot-root overlay (entire rootfs writable). In release mode, only overlays
/etc,/opt,/usrwith writable upperdir on/data/overlay. Mounts/dev/data(ext4),/dev/model(ext4 ro),/dev/psp_udisk_s(exfat), ano_usepartition as key store at/unifykey - Launches D-Bus session bus and exports the address to
/tmp/dbus/ - Sets Qt framebuffer environment (
QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0) - Runs all S??* scripts in numerical order:
-
S10mdev – starts mdev as device manager, coldplugs kernel modules
-
S11rsyslogd – starts rsyslog, logging everything to
/opt/logs/psp.log -
S30dbus – starts the D-Bus system bus daemon
-
S45asound – initializes ALSA volume for two TAS5707 amplifier chips (A and B) to 150 (or reads stored volume from
/data/system_volume); also sets permissions on/usr/bin/tea_models -
S50_ko_install (run in background) – the heavyweight init:
- Loads
ddr_access_priority.ko - Creates 800MB zram swap, enables with priority 10
- Attaches Amlogic unifykeys
- Sets
min_free_kbytes=12288,swappiness=10 - Starts boot_animation (raw RGB frames to framebuffer)
- Loads
tea_license.ko(Insta360’s proprietary license enforcement kernel module) - Exports GPIOs 451, 453, 489, 490, 491 for WiFi power control
- Loads
aml_wifi.kothenatbm613x_wifi_sdio.ko(ATBM6031 WiFi SDIO) - Loads
galcore.ko(Amlogic NPU driver) in background - WiFi install retries up to 5 times with GPIO power cycling; if all fail, reboots (up to 3 times tracked via
/data/common_settings/check_wifi_reboot_count) - Mounts debugfs
- Loads
-
S60pspapp_daemon – starts
pspapp_daemonandpspapp_watchdog(the main application supervisor) -
S89usbgadget – configures USB gadget via configfs:
- Vendor ID:
0x18F0, Product ID:0x4e40 - Manufacturer: “insta360”, Product: “psp”
- Initializes UAC2 (USB Audio Class 2.0) at 48kHz/16-bit stereo, HID (Vendor+Telephone+Consumer composite descriptor), ADB, MSC, CDC-ACM
- In normal mode: enables UAC + HID only
- Creates named pipes
/tmp/hid_fifo_inputand/tmp/hid_fifo_output - ADB is initialized but NOT enabled by default (can be enabled via reconfiguration)
- Vendor ID:
-
S90_emmc_rcv – after 5-second delay, checks eMMC firmware revision and upgrades if below
0x1200000000000000using/usr/bin/emmc_tool -
S99_PSPLauncher – reads hardware revision via ADC voltage on
iio:device0/in_voltage0_input, writes to/etc/hwrevision
2. NETWORK SERVICES EXPOSED
Section titled “2. NETWORK SERVICES EXPOSED”Active Services:
Section titled “Active Services:”| Service | Port | Protocol | Notes |
|---|---|---|---|
| Telnet | 23 | TCP | Via inetd, runs as root, no authentication beyond login |
| Serial console | ttyS0 | UART | Root shell, no password prompt |
| Web UI (CGI) | Unknown (likely 80) | HTTP | /var/www/ with CGI scripts via webshell_cli |
| wpa_supplicant | D-Bus | local | WiFi management |
| hostapd | - | 802.11 | AP mode on wlan0/wlan1 |
| dnsmasq | 53,67 (DHCP) | UDP | Only in AP mode, subnet 192.168.2.0/24 |
| ADB | USB | - | Initialized but disabled in default mode |
| USB Audio | USB | UAC2 | 48kHz stereo capture+playback |
| USB HID | USB | - | Vendor+Telephone+Consumer composite |
| gdbserver | present | TCP | Binary exists but not auto-started |
Web UI (CGI-bin endpoints):
Section titled “Web UI (CGI-bin endpoints):”/cgi-bin/wifi/wifi_tool.sh– WiFi setup/cgi-bin/wifi/scan_list.sh– WiFi scan results/cgi-bin/wifi/check_wifi.sh– WiFi status/cgi-bin/record/record_ctl.sh– Audio recording control (start/stop/delete/play)/cgi-bin/record/record_list.sh– List recordings/cgi-bin/spotify/set_spotify.sh– Configure Spotify (librespot)/cgi-bin/spotify/check_spotify.sh– Check Spotify status/cgi-bin/swupdate/swupdate.sh– Trigger OTA update/cgi-bin/swupdate/device_info.sh– Device info disclosure
3. SECURITY CONFIGURATION
Section titled “3. SECURITY CONFIGURATION”CRITICAL FINDINGS:
Section titled “CRITICAL FINDINGS:”Root shell on serial console with no authentication:
/etc/inittab line 34: ttyS0::respawn:-/bin/sh – an unrestricted root shell on serial, no login prompt.
Telnet enabled by default (as root, no password check beyond shadow):
/etc/inetd.conf: telnet stream tcp nowait root telnetd telnetd -i
Root password is a SHA-256 hash (crackable):
/etc/shadow: root:$5$f9rdYTjzvJ$tiE3E0n0jM1eaEOAbP3mAGdiHS862RHGr3ae3VglmG/:::::::
The $5$ prefix indicates SHA-256-crypt. The salt is f9rdYTjzvJ. This is vulnerable to offline brute-force.
No firewall: No iptables, nftables, or any firewall rules anywhere in the filesystem. Zero network access control.
Hardcoded WiFi credentials:
/etc/wpa_supplicant.conf:
network={ ssid="insta360-guest" psk="insta360"}Core dump collection enabled globally:
/etc/profile line 71: ulimit -c unlimited – every crash produces an unlimited core dump, potentially leaking memory contents.
SWUpdate public key is weak RSA-512:
/etc/swupdate-public.pem is a 512-bit RSA key (the MFww... header and 64-byte modulus confirm this). RSA-512 has been factorable since 1999 and can be broken in hours on commodity hardware. This means firmware update signing can be bypassed – an attacker could forge signed firmware updates.
CGI scripts run as root with no input validation:
The CGI scripts in /var/www/cgi-bin/ directly pass user input to shell commands. For example, set_spotify.sh reads username/password from a file and passes them to librespot without sanitization.
Debug mode accessible via unifykey: If the “deviceid” unifykey is set to “debug”, the entire rootfs becomes writable via full pivot-root overlay.
User Accounts:
Section titled “User Accounts:”root(uid 0) – shell/bin/sh, password set (SHA-256 hash)daemon,bin,sys,sync,mail,www-data,operator,nobody– all/bin/falsedbus(uid 1000) –/bin/false
Permissions:
Section titled “Permissions:”- umask: 022
/dev/random,/dev/urandom: 444 (read-only, which is correct)- Input devices: 640
/dev/ttyS*: 660
4. AUDIO PIPELINE CONFIGURATION
Section titled “4. AUDIO PIPELINE CONFIGURATION”Hardware:
Section titled “Hardware:”- Two TAS5707 amplifier chips (referred to as “5707_A” and “5707_B”) with volume range 0-511
- Amlogic SoC audio with hardware codec at card 0
- 10-channel microphone array (channel map config references mic indices 0-9)
- NPU (galcore.ko) for AI audio processing
ALSA Configuration (/etc/asound.conf):
Section titled “ALSA Configuration (/etc/asound.conf):”- Default PCM:
hw:0,1(hardware playback) - Microphone input:
hw:0,2 - AVS input:
hw:0,4 dmixoutput mixer at 48kHz/16-bit stereo onhw:1,0,0- 2-to-8 channel upmixing via route plugin with specific gain coefficients
- Voice prompt output as mono-to-stereo with equal gain
- Rate conversion using SpeexRate medium quality
Audio Processing:
Section titled “Audio Processing:”- Dynamic EQ (
/etc/dynamic_eq_config.json): IIR EQ with 3 bands (150Hz, 8kHz, 90Hz), multi-band AGC with 4-band crossover at 300/4000/7000 Hz - Alternative EQ (
/etc/dynamic_eq_config_2.json): 4-band EQ at 150/800/400/3500 Hz - Reverb (
/etc/reverb_config.json): RT60=1.0s, room distance=0.2, gain=0.85, reverb rate=0.5 - Hardware EQ/DRC (
/etc/eq_drc_params.ini): Amlogic SoC hardware EQ (16 bands), full-band DRC (3 knees), multi-band DRC (3 bands, crossover at 150Hz and 5000Hz), noise gate at -70dB - External amplifier (
/etc/EXT_AMP.ini): master volume 230/511
AI/ML Audio Models:
Section titled “AI/ML Audio Models:”15 neural network models in /usr/bin/tea_models/:
- Beamforming: Cardioid, Supercardioid, Figure-8 patterns (each with high/low/VAD rotate variants)
insta360_nnpost_solo_steedy.bin– solo speaker steady-state processinginsta360_psp_mchpre_chimera_model.bin– multi-channel pre-processinginsta360_psp_pre_chimera_model.bin– pre-processingnnec_two_stage_32k.bin– neural network echo cancellation (32kHz)premask_reverb_best_model.bin– reverb maskingrafa-best_model.bin– (unknown purpose, possibly noise reduction)
Beamforming Modes (from UI strings):
Section titled “Beamforming Modes (from UI strings):”- Omni – all directions
- Cardioid – front pickup
- Supercardioid – narrow front pickup
- Figure-8 – front+back
- Stereo – L/R channels (USB input only)
- Noise Reduction mode
5. WIFI AP MODE CONFIGURATION
Section titled “5. WIFI AP MODE CONFIGURATION”/etc/hostapd.conf (template – SSID “test” is a placeholder):
- Interface:
wlan0 - Mode: 802.11g (2.4 GHz)
- Channel: 1
- Max stations: 255
- WMM enabled
- Auth algorithms: 3 (both Open and Shared Key)
- MAC ACL: accept all (macaddr_acl=0)
- SSID not hidden (ignore_broadcast_ssid=0)
When AP mode activates (via hostapd_conf_pre):
- Uses a temp config
/etc/hostapd_temp.conf(not present in base rootfs, likely generated at runtime) - AP IP:
192.168.2.1 - DHCP range:
192.168.2.50to192.168.2.200, 12-hour lease via dnsmasq on port 100
WiFi chip: ATBM6031 (atbm613x_wifi_sdio.ko), with Amlogic WiFi wrapper (aml_wifi.ko).
6. SERVICES THAT RUN AUTOMATICALLY
Section titled “6. SERVICES THAT RUN AUTOMATICALLY”| Service | Description |
|---|---|
mdev |
Device manager |
rsyslogd |
System logging to /opt/logs/psp.log |
dbus-daemon |
System + session bus |
pspapp_daemon |
Main application daemon |
pspapp_watchdog |
Watchdog for main app |
boot_animation |
Boot splash (raw RGB frames to framebuffer) |
inetd |
Runs telnetd |
| USB gadget | UAC2 + HID composite |
logrotate |
Log rotation via cron (/etc/cron.d/e2scrub_all) |
remotecfg |
IR remote configuration |
7. HARDCODED CREDENTIALS AND SECRETS
Section titled “7. HARDCODED CREDENTIALS AND SECRETS”| Item | Location | Value |
|---|---|---|
| WiFi PSK | /etc/wpa_supplicant.conf |
SSID: insta360-guest, PSK: insta360 |
| Root password hash | /etc/shadow |
$5$f9rdYTjzvJ$tiE3E0n0jM1eaEOAbP3mAGdiHS862RHGr3ae3VglmG/ |
| USB vendor/product | S89usbgadget |
VID 0x18F0, PID 0x4e40 |
| Fallback serial | S89usbgadget |
0123456789ABCDEF (if cpuinfo serial unavailable) |
| DNS server | /etc/inittab |
8.8.8.8 (hardcoded) |
| Chinese DNS | wifi_tool.sh |
114.114.114.114 (used as ping fallback) |
| SWUpdate signing key | /etc/swupdate-public.pem |
512-bit RSA public key (trivially breakable) |
| Entropy seed | /etc/entropy.bin |
Static entropy file for hostapd |
8. TELEMETRY / PHONE-HOME BEHAVIOR
Section titled “8. TELEMETRY / PHONE-HOME BEHAVIOR”No explicit phone-home found in the shell scripts and configs. However:
- The UI strings reference “sync to cloud” for AI recordings: “Files have been stored locally and will automatically sync to cloud when connected to the network” – indicating the main
pspappbinary (not analyzed here as it’s a compiled binary) likely connects to Insta360 cloud services. - Auto-download firmware updates: “When connected to Wi-Fi, the device will automatically download software updates during idle time” – the
swupdatesystem can fetch OTA updates from a URL written viaurlmisc write. - The
swupdate-url.shscript pings an OTA server and writes the URL persistently. - DNS is hardcoded to
8.8.8.8(Google), with114.114.114.114(Chinese DNS) as a connectivity test fallback. - No explicit analytics endpoints visible in config files; any telemetry would be in the compiled binaries (
pspapp,audioserver).
9. INTERESTING / UNUSUAL CONFIGURATIONS
Section titled “9. INTERESTING / UNUSUAL CONFIGURATIONS”-
Spotify Connect built-in: The device has
librespot(open-source Spotify client) support with a CGI endpoint to configure credentials. Credentials are stored in plaintext in/var/www/cgi-bin/spotify/spotify.conf. -
Proprietary kernel module
tea_license.ko: Loaded early in boot from/lib/modules/5.4.242/kernel/insta360/. This is a license enforcement mechanism for the TEA SDK (v3.10.1.1153) audio AI models. -
ASR (speech recognition): Version
1027_v0.4.23noted insw-versions, suggesting on-device voice recognition. -
800MB zram swap: Aggressive memory management for an embedded device, suggesting the applications are memory-hungry (likely due to NPU inference workloads).
-
OP-TEE: Kernel modules
opteeandoptee_armtzare loaded, indicating TrustZone/secure world usage (likely for key storage in the “unifykeys” system). -
Unifykey system: Amlogic’s key storage in eMMC RPMB (Replay Protected Memory Block), used for device ID, debug mode flag, and potentially DRM keys.
-
Motorized mechanism: The UI strings reference “Elevation obstructed. Descending again to shut down” and “Abnormal extension or retraction” – the device has a motorized extending/retracting speaker column.
-
USB HID telephony: The active HID descriptor is a Vendor+Telephone+Consumer composite, enabling the device to function as a USB speakerphone with call control buttons (hook switch, off-hook, mute, ring indicators).
-
Record CGI with no auth: The recording endpoint allows anyone on the network to start/stop audio recording, list files, and play them back. Combined with no firewall, this is a remote eavesdropping vector.
-
MTP support: The device can present as a USB mass storage/MTP device, exposing
/mnt/udisk. -
/etc/entropy.bin: A static binary entropy file shipped with the firmware, used by hostapd. If this is the same across all devices, it weakens WPA key generation. -
Board name:
AmlSpeaker(/etc/board_info), confirming this is built on Amlogic’s reference speaker platform. -
20 supported languages: Full LVGL-based touchscreen UI with translations for Chinese, English, French, German, Spanish, Dutch, Italian, Polish, Portuguese, Russian, Japanese, Korean, Traditional Chinese, Arabic, Hindi, Indonesian, Malay, Thai, Vietnamese, and Turkish.
Summary of Key Security Concerns
Section titled “Summary of Key Security Concerns”- Root shell on UART with zero authentication
- Telnet service running as root (network-accessible)
- No firewall at all
- RSA-512 firmware signing key (trivially forgeable)
- Hardcoded WiFi credentials
- CGI scripts with no authentication or input sanitization
- Unlimited core dumps enabled system-wide
- Static entropy file for hostapd across devices
- Remote audio recording control with no auth (potential eavesdropping vector)
- Spotify credentials stored in plaintext