Just as james vaughan, I spent a recent flight finding out what I could do with a connection to the flight’s wifi, but without access to the internet. After reading james‘ blogpost, I decided to share my story ‒ I found more data 🙂
I was on my way to Greece, a direct flight from Hamburg to Lefkada. It’s a long flight. Marabu’s wifi is not for browsing the Internet but for accessing the inflight entertainment system only. I was bored, did not like the movie selection, so I opened up my browser’s network dev tools to see if I could figure out what was going on.
Citing james,
I used my browser’s “Copy as cURL” feature to quickly get a command to hit the endpoint. As an aside, this feature is present in Firefox and all chromium-based browsers and it’s really handy if you ever need to reply requests made by your browser and want to send all the same headers.
The information the API returned in the beginning were not too interesting. I cannot provide an example response from one of those first requests. If I remember correctly, the responses showed only data that drives the inflight wifi portal’s flight status screen, showing our plane’s location, air speed, etc.
However, since this was one of the few things I could access on this network, I decided to make the most of it. The following API endpoint is what caught my eye: https://marabu.everhub.aero/monitor/status?path=/system/net/.
{
"apn": "internet.emt.ee",
"interfaces": [
{
"iface": "enp3s0",
"ip4": "10.20.30.235",
"mac": "00:e0:4c:da:e5:f6",
"operstate": "up"
}
],
"domain": "marabu.everhub.aero",
"eth-ip": "NON-IP",
"wireless": {
"2.4GHz": "enabled",
"5GHz": "enabled"
},
"modem": {
"modem": {
"device": "ttyUSB2",
"power": "low",
"state": "disabled",
"fail-reason": "--",
"signal": "0",
"imei": "867<redacted>",
"operator": {
"code": "--",
"name": "--",
"registration": "--"
}
},
"sim": {
"code": "<redacted>",
"name": "Telia",
"imsi": "248<redacted>",
"iccid": "893<redacted>"
},
"bearer": {
"interface": "",
"status": "",
"apn": "",
"roaming": "",
"ip-type": "",
"ip": ""
},
"system": {
"state": "unavailable",
"ip": "",
"connection": ""
}
},
"cc-connection": "error",
"ext-ip": "none",
"type": "O",
"connected-users": 0,
"ssid": "marabu005",
"wds": {
"info": [
"",
"WAP is not in WDSAP mode. Exiting."
],
"ssids": []
}
}
I did not expect that the API would provide access to IMSI, IMEI and ICCID. Then, I decided to change the path parameter: https://marabu.everhub.aero/monitor/status?path=/. Now, the response of the server revealed even more, including information about
- file system
- OS
- „distro“: „Ubuntu“
- „release“: „20.04.6 LTS“
- installed packages, scripts and their versions
- „paxapp-version“: „2.0.3-1“
- „crewapp-version“: „2.0.1-1“
- squawk code and emergency status
- „squawk“: „4144“
- „emergency“: „none“
- recent boot and shutdown times
{
"alerts": [],
"system": {
"net": {
"apn": "internet.emt.ee",
"interfaces": [
{
"iface": "enp3s0",
"ip4": "10.20.30.235",
"mac": "00:e0:4c:da:e5:f6",
"operstate": "up"
}
],
"domain": "marabu.everhub.aero",
"eth-ip": "NON-IP",
"wireless": {
"2.4GHz": "enabled",
"5GHz": "enabled"
},
"modem": {
"modem": {
"device": "ttyUSB2",
"power": "low",
"state": "disabled",
"fail-reason": "--",
"signal": "0",
"imei": "867<redacted>",
"operator": {
"code": "--",
"name": "--",
"registration": "--"
}
},
"sim": {
"code": "<redacted>",
"name": "Telia",
"imsi": "248<redacted>",
"iccid": "893<redacted>"
},
"bearer": {
"interface": "",
"status": "",
"apn": "",
"roaming": "",
"ip-type": "",
"ip": ""
},
"system": {
"state": "unavailable",
"ip": "",
"connection": ""
}
},
"cc-connection": "error",
"ext-ip": "none",
"type": "O",
"connected-users": 2,
"ssid": "marabu005",
"wds": {
"info": [
"",
"WAP is not in WDSAP mode. Exiting."
],
"ssids": []
}
},
"batt_cycle": {
"cycle_0": 7,
"cycle_1": 0
},
"temperatures": {
"cpu0": 56,
"cpu1": 56,
"cpu2": 58,
"cpu3": 58,
"mb": 31,
"batt1": 27.85,
"batt2": 0,
"sda": null,
"sdb": 44
},
"uptime": "1h 56m 54.3s",
"powerboard": {
"charging": false,
"cycle_0": 7,
"cycle_1": 0,
"hardver": 2,
"mah_0": 4267,
"mah_1": 0,
"percent_0": 69,
"percent_1": 0,
"poweroff": false,
"serial_0": 26486,
"serial_1": 0,
"softver": 3,
"switch": true,
"temp_0": 28.05,
"temp_1": 0,
"volt_0": 15.46,
"volt_1": 0
},
"fs": [
{
"size": "245 GB",
"used": "33 GB",
"use": "14.05 %",
"mount": "/"
},
{
"size": "639 GB",
"used": "219 GB",
"use": "36.21 %",
"mount": "/data"
},
{
"size": "209 GB",
"used": "22 MB",
"use": "0.01 %",
"mount": "/data/internal"
},
{
"size": "987 MB",
"used": "125 MB",
"use": "13.56 %",
"mount": "/data/crypto"
}
],
"kernel": "5.4.0-150-generic",
"memory": {
"total": "7 GB",
"free": "2 GB",
"used": "5 GB"
},
"os": {
"platform": "linux",
"distro": "Ubuntu",
"release": "20.04.6 LTS",
"kernel": "5.4.0-150-generic",
"arch": "x64"
},
"flight_mode": "adsb",
"services": {
"system": {
"dnsmasq": "active",
"NetworkManager": "active",
"docker": "active",
"pm2-root": "active",
"salt-minion": "active",
"openresty": "active",
"ifd-system-status": "active",
"ifd-wap-status": "active",
"ifd-switch-status": "active",
"ifd-power-status": "active",
"ifd-dump1090": "active",
"ModemManager": "active"
},
"docker": {
"gde-web": "active",
"gde-events": "active",
"ad-engine": "active",
"ad-proxy": "active",
"ad-registration": "active",
"mongo": "active",
"datasync": "active",
"syncmanager": "active",
"games-api": "active",
"games-web": "active",
"tomcat": "active",
"wvpl.ideanovatech.com": "active",
"fps.ideanovatech.com": "active",
"socket": "active",
"flightdata": "active",
"tiles": "active",
"mediausage": "active",
"metadata": "active",
"flightpush": "active",
"fp3d": "active",
"orders": "active"
},
"pm2": {
"manager": "active",
"importer": "active",
"monitor": "active"
}
},
"boots": [
{
"start": "2023-08-31 03:32:08",
"duration": "00:22",
"stop": "2023-08-31 03:54:08",
"type": "down"
},
{
"start": "2023-08-30 12:04:35",
"duration": "15:26",
"stop": "2023-08-31 03:30:35",
"type": "crash"
},
{
"start": "2023-08-30 03:20:21",
"duration": "08:43",
"stop": "2023-08-30 12:03:21",
"type": "crash"
},
{
"start": "2023-08-29 12:12:48",
"duration": "07:55",
"stop": "2023-08-29 20:07:48",
"type": "down"
},
{
"start": "2023-08-28 12:20:05",
"duration": "23:51",
"stop": "2023-08-29 12:11:05",
"type": "crash"
}
]
},
"updatedAt": "2023-08-31T06:40:28.385Z",
"serverId": "1c19aaee-bc86-4566-bd94-705c9558eff1",
"hostname": "marabu005",
"id": {
"hostname": "marabu005",
"serverId": "1c19aaee-bc86-4566-bd94-705c9558eff1",
"hardwareId": "00e04cdae5f9",
"sda": "S5RRNF0W305357W",
"sdb": "50026B76836BBD63",
"batt1": "26486",
"batt2": "0"
},
"client": {
"json": {
"IATA": "EE",
"name": "Marabu Airlines"
}
},
"timestamp": "2023-08-31T06:40:28.000Z",
"config": {
"apps": {
"paxapp-version": "2.0.3-1",
"paxapp": "EE-0723",
"panelapp-version": "3.0.0",
"crewapp-version": "2.0.1-1",
"crewapp": "EE"
}
},
"drm": {
"id": "59c427298abe59d53925c779b56472dfb5973c0ec2aa13e6cac31be8be875ac2",
"is-installed": "yes",
"validity": "2023-12-28",
"is-test-license": "no"
},
"certs": {
"wv": "2023-10-24",
"fps": "2023-03-23",
"ssl": "2023-12-07",
"ssl-chain": "2023-12-07,2030-12-31,2028-12-31,2028-12-31"
},
"release": "-",
"flight": {
"_state": {
"hex": "511171",
"flight": "MBU6298 ",
"alt_baro": 35000,
"alt_geom": 35775,
"gs": 482.1,
"ias": 263,
"tas": 448,
"mach": 0.776,
"track": 152.6,
"track_rate": 0,
"roll": 0.2,
"mag_heading": 150.8,
"baro_rate": 0,
"geom_rate": 0,
"squawk": "4144",
"emergency": "none",
"category": "A3",
"nav_qnh": 1012.8,
"nav_altitude_mcp": 35008,
"lat": 46.048233,
"lon": 16.148027,
"nic": 8,
"rc": 186,
"seen_pos": 0.5,
"version": 2,
"nic_baro": 1,
"nac_p": 9,
"nac_v": 1,
"sil": 3,
"sil_type": "perhour",
"gva": 2,
"sda": 3,
"mlat": [],
"tisb": [],
"messages": 111911,
"seen": 0.1,
"rssi": -9.3,
"now": "2023-08-31T05:45:00Z",
"registration": null,
"flight_code": ""
},
"_lastSeen": "2023-08-31T05:45:00Z",
"schedule": {
"flight_code": null,
"departure_iata": null,
"destination_iata": null
}
},
"versions": {
"os": "20.04.6 LTS (Focal Fossa)",
"kernel": "5.4.0-150",
"software": "B0523",
"webapp": "10.0.0",
"panelapp": "3.0.0",
"crewapp": "4.1.0",
"tools": {
"node": "v16.20.0",
"npm": "9.6.7",
"json5": "2.2.3",
"n": "v9.1.0",
"pm2": "5.2.0",
"fx": "24.0.0",
"jq": "1.6-159-gcff5336-dirty",
"jc": "1.23.2",
"lnav": "0.11.1-49-gaeea356",
"yq": "v4.34.1",
"aws": "2.11.25"
},
"deb": {
"ifd-bare0-system-prerequisites": "4.0.0-1",
"ifd-bare0-system-tools": "7.2.6-1",
"ifd-core0-system-scripts": "6.5.11-1",
"ifd-core1-disk-encrypted-part-ext": "1.0.1",
"ifd-core1-disk-encrypted-part-int": "1.0.0",
"ifd-core1-disk-setup": "5.0.6-1",
"ifd-core2-network-settings": "5.1.5-1",
"ifd-core2-network-settings-everbox": "5.0.3-1",
"ifd-core3-hw-dump1090-generic": "2.1.4-1",
"ifd-core3-hw-modem-generic": "2.0.1-1",
"ifd-core3-hw-powerboard-everbox": "2.0.4-1",
"ifd-core3-hw-temperature-everbox": "1.1.0-1",
"ifd-core3-hw-touchscreen-everbox": "4.2.3-1",
"ifd-core3-hw-wap-everbox": "6.1.0-1",
"ifd-core4-helpers-aws-s3-cfg": "2.0.0-1",
"ifd-core4-helpers-nexus-cfg": "2.0.0-1",
"ifd-full0-svc-svc-monitor": "5.0.1-1",
"ifd-full0-svc-switch-status": "3.0.3-1",
"ifd-full0-svc-system-status": "2.1.1-1",
"ifd-full1-certs-ssl": "2.0.1-1",
"ifd-full2-docker-common": "9.2.1-1",
"ifd-full2-docker-common-cfg-generic": "1.0.3-1",
"ifd-full2-docker-common-img-datasync": "8.0.1-129",
"ifd-full2-docker-common-img-mongo": "3.6.23-22",
"ifd-full2-docker-common-img-syncmanager": "3.0.1-30",
"ifd-full2-docker-common-sync-cfg": "1.1.0-1",
"ifd-full3-addon-ad-engine": "1.3.1-1",
"ifd-full3-addon-ad-engine-cfg-generic": "1.0.1-1",
"ifd-full3-addon-ad-engine-img-engine": "0.0.7",
"ifd-full3-addon-ad-engine-img-proxy": "0.0.1",
"ifd-full3-addon-ad-engine-img-registration": "0.0.2",
"ifd-full3-addon-drm-support": "6.2.1-1",
"ifd-full3-addon-drm-support-certs-fairplay": "3.0.0-1",
"ifd-full3-addon-drm-support-certs-license": "2.0.3-1",
"ifd-full3-addon-drm-support-certs-widevine": "2.0.3-1",
"ifd-full3-addon-drm-support-cfg-generic": "1.0.1-1",
"ifd-full3-addon-drm-support-img-fp": "5.6.4",
"ifd-full3-addon-drm-support-img-proxy": "5.0.3",
"ifd-full3-addon-drm-support-img-wv": "5.5.3",
"ifd-full3-addon-drm-support-tpm": "2.0.2-1",
"ifd-full3-addon-fp3d": "1.1.0-1",
"ifd-full3-addon-fp3d-cfg-generic": "1.0.0-1",
"ifd-full3-addon-fp3d-content-ea": "2.0.0-1",
"ifd-full3-addon-fp3d-content-generic": "2.0.0-1",
"ifd-full3-addon-fp3d-img": "7.17.3",
"ifd-full3-addon-gde-demo": "1.1.0-1",
"ifd-full3-addon-gde-demo-cfg-generic": "1.0.0-1",
"ifd-full3-addon-gde-demo-img": "1.0.1-1",
"ifd-full3-addon-gde-events": "1.1.0-1",
"ifd-full3-addon-gde-events-cfg-generic": "1.0.0-1",
"ifd-full3-addon-gde-events-img": "2.0.0-1",
"ifd-full3-addon-gladi8tor": "7.1.2-1",
"ifd-full3-addon-gladi8tor-cfg-generic": "1.0.4-1",
"ifd-full3-addon-gladi8tor-content-v3#0#1-ifd": "1.0.0-1",
"ifd-full3-addon-gladi8tor-img-api": "2.2.1",
"ifd-full3-addon-gladi8tor-img-web": "3.5.0",
"ifd-full3-addon-mediausage": "4.1.0-1",
"ifd-full3-addon-mediausage-cfg-generic": "1.0.0-1",
"ifd-full3-addon-mediausage-img": "6.0.1-72",
"ifd-full3-addon-metadata": "5.1.0-1",
"ifd-full3-addon-metadata-cfg-generic": "1.0.0-1",
"ifd-full3-addon-metadata-img": "8.0.3-61",
"ifd-full3-addon-metadata-scripts": "3.1.0-1",
"ifd-full3-addon-moving-map": "8.1.0-1",
"ifd-full3-addon-moving-map-cfg-generic": "1.0.1-1",
"ifd-full3-addon-moving-map-data": "1.0.7-1",
"ifd-full3-addon-moving-map-img": "8.0.1-82",
"ifd-full3-addon-moving-map-img-tiles": "5.0.1-43",
"ifd-full3-addon-moving-map-push": "2.1.0-1",
"ifd-full3-addon-moving-map-push-cfg-generic": "1.0.0-1",
"ifd-full3-addon-moving-map-push-img": "2.0.1-17",
"ifd-full3-addon-orders": "5.1.0-1",
"ifd-full3-addon-orders-cfg-generic": "1.0.0-1",
"ifd-full3-addon-orders-img": "2.0.1-21",
"ifd-full3-addon-socket": "6.1.0-1",
"ifd-full3-addon-socket-cfg-generic": "1.0.0-1",
"ifd-full3-addon-socket-img": "2.0.3-54",
"ifd-full4-app-crew": "4.1.0-1",
"ifd-full4-app-crew-config-ee": "2.0.1-1",
"ifd-full4-app-crew-config-generic": "2.0.30-4",
"ifd-full4-app-crew-dev": "1.0.1-1",
"ifd-full4-app-crew-scripts": "1.2.9-1",
"ifd-full4-app-panel": "3.0.0-1",
"ifd-full4-app-panel-auth": "2.0.1-1",
"ifd-full4-app-panel-config-generic": "1.1.2-1",
"ifd-full4-app-panel-dev": "1.0.1-1",
"ifd-full4-app-panel-scripts": "1.0.0-1",
"ifd-full4-app-pax-ng": "10.0.0-1",
"ifd-full4-app-pax-ng-config-ee-0723": "2.0.3-1",
"ifd-full4-app-pax-ng-config-generic": "2.0.123-5",
"ifd-full4-app-pax-ng-dev": "1.1.3-1",
"ifd-full4-app-pax-ng-scripts": "1.3.8-1",
"ifd-full5-pm2-data-importer": "8.0.2-1",
"ifd-full5-pm2-data-importer-scripts": "2.0.0-1",
"ifd-full5-pm2-server-manager": "6.0.2-2",
"ifd-full5-pm2-server-manager-cfg-generic": "1.0.0-1",
"ifd-full5-pm2-server-monitor": "6.0.2-2",
"ifd-full5-pm2-server-monitor-cfg-generic": "1.0.0-1",
"ifd-full5-pm2-server-monitor-config": "4.0.0-1",
"ifd-full5-pm2-server-monitor-config-cpu-mem": "2.0.0-1",
"ifd-full5-pm2-server-monitor-config-temp-everbox": "2.0.0-1",
"ifd-full5-pm2-server-monitor-scripts": "3.0.4-1"
},
"svc_pm2": {
"manager": "6.0.2",
"importer": "8.0.2",
"monitor": "6.0.2"
},
"svc_docker": {
"flightpush": "2.0.1-17",
"tomcat": "5.0.3",
"mediausage": "6.0.1-72",
"datasync": "8.0.1-129",
"flightdata": "8.0.1-82",
"syncmanager": "3.0.1-30",
"metadata": "8.0.3-61",
"orders": "2.0.1-21",
"tiles": "5.0.1-43",
"socket": "2.0.3-54",
"fps#ideanovatech#com": "5.6.4",
"gde-web": "1.0.1-1",
"ad-engine": "0.0.7",
"gde-events": "2.0.0-1",
"mongo": "3.6.23-22",
"ad-registration": "0.0.2",
"ad-proxy": "0.0.1",
"wvpl#ideanovatech#com": "5.5.3",
"games-api": "2.2.1",
"fp3d": "7.17.3",
"games-web": "3.5.0"
},
"svc_systemd": {
"wap-status#sh": "2.0.0",
"disk-setup#sh": "2.8.3",
"svc-monitor#sh": "3.0.1",
"power-status#py": "2.1.4",
"system-status#sh": "2.1.1",
"docker-compose-up#sh": "1.1.1",
"power-status#sh": "2.0.2",
"switch-status#sh": "2.0.0",
"wap-status#py": "3.2.0",
"after-start/51-bitmeteros": "1.0.0",
"after-start/61-modem": "1.0.1",
"after-start/42-crew-app-config": "2.0.0",
"after-start/71-flightmode": "1.0.0",
"after-start/62-ssid": "1.0.1",
"after-start/63-wap": "1.0.0",
"after-start/41-pax-app-config": "1.0.1",
"after-start#sh": "3.0.2",
"dump1090#sh": "1.3.0",
"before-shutdown#sh": "2.0.0",
"docker-cleanup#sh": "1.1.0"
},
"scripts": {
"get-ip": "3.0.0",
"ifd-upgrade": "1.0.1",
"ifd-ad-engine-setup": "1.0.0",
"ifd-crew-app-dev": "1.0.1",
"ifd-panel-app-dev": "1.0.0",
"featureflags": "2.1.0",
"_mount_ext": "1.0.1",
"_make_boot_image#sh": "3.0.0",
"ifd-tiles": "1.1.0",
"set-hostname": "2.0.1",
"wapssh": "1.0.0",
"_remove_drm_keys#sh": "1.0.0",
"_common#sh": "5.0.4",
"ifd-help": "1.0.1",
"ifd-update": "1.0.0",
"switch-mode#py": "0.0.3",
"ifd-gladi8tor-content": "1.1.1",
"_setup#sh": "2.0.5",
"ifd-info": "3.0.2",
"temperature": "2.1.0",
"_deep_cleanup#sh": "2.1.0",
"prepare-status": "1.4.0",
"test-cc-connection": "1.0.2",
"ifd-pax-app-dev": "1.3.1",
"version": "3.0.1",
"flight-info": "1.0.1",
"svcmon": "1.0.1",
"ifd-pax-app-config": "3.0.1",
"ifd-gladi8tor-setup": "2.1.0",
"boots": "1.1.0",
"ifd-pax-app-media": "3.0.1",
"id/_spread_id#sh": "1.1.1",
"id/_clear_id#sh": "1.0.2",
"id/_backup_id#sh": "1.0.1",
"id/_common_id#sh": "1.1.1",
"get-id": "1.1.0",
"flight-debug": "1.0.0",
"provision": "5.0.3",
"restart#sh": "1.0.0",
"powerboard-debug#sh": "2.0.3",
"webdrm-decrypt": "",
"ifd-sync-phases": "1.0.1",
"pax-app": "5.0.0",
"ifd-metadata-install": "4.1.0",
"ifd-os-care": "1.6.1",
"ifd-domain": "2.0.0",
"_create_release#sh": "4.1.0",
"ifd-status": "1.0.0",
"webdrm-license": "1.2.1",
"restart-helper#sh": "1.0.0",
"ifd-metadata-update": "3.1.0",
"flight-mode": "2.1.0",
"ifd-sync": "4.1.1",
"webdrm-provision": "1.0.3",
"connected-users": "3.0.0",
"events": "1.1.0",
"ifd-wap-config": "3.0.1",
"webdrm-install": "2.1.0",
"powerboard": "1.0.0",
"svc": "2.0.0",
"ifd-wap-password": "1.0.3",
"battery": "1.0.1",
"apn": "1.0.1",
"ifd-wap-wds": "1.3.3",
"_mount_int": "1.0.1",
"webdrm-multi-license-generator": "1.0.0",
"alerts": "3.0.0",
"flight-sim": "2.0.1",
"crew-app": "4.0.0",
"ssid": "4.0.1",
"panel": "2.0.0",
"renew-ip": "1.0.0",
"webdrm-generate": "1.0.0",
"ifd-logs": "3.0.0",
"modem": "1.1.2",
"presync-remove-bad-status-files#sh": "1.0.0",
"wap": "3.1.0",
"ifd-crew-app-config": "2.0.1",
"ifd-hw-switch": "1.0.2"
},
"gladi8tor": {
"games": {
"version": "h1:E23E56PYPboLVH0/DnKFETXwg6wiEOiP0fH9r62+uBM=",
"registered_at": "2023-08-31T05:37:46.917263525Z"
},
"streams": {
"version": "h1:zbYAu8XmXwFZF3ZOkjHjA6W4b9+TDgqbAsIHycOJyBU=",
"registered_at": "2023-08-31T05:37:46.926787425Z"
},
"news": {
"version": "h1:thk8Ry7B+fXYGumCMegERdy2lGaU0rZOVyZ8kocCTbw=",
"registered_at": "2023-07-06T12:23:36.550332941Z"
},
"advertisements": {
"version": "h1:E/WJEs3INb1Qc+IWtbHjNA0oWRJet41YiLcgHK+pnJU=",
"registered_at": "2023-07-06T12:23:36.867154783Z"
},
"sliders": {
"version": "h1:CnVnZYjr1pJHJKXP31oBeBF/JFDrjbYWfDJDf+B0s2U=",
"registered_at": "2023-07-06T12:23:37.150018105Z"
},
"content": ""
}
}
}
And then, we finally arrived in Levkada, I made a photo of the server and did not think about sharing my story until james shared his.
If it were my inflight entertainment system, I would not want it to leak so much. Many more airlines rely on the same system. Thus, I also notified the vendor.