ドイツの脆弱な電話機は
簡単に root が取れる

- 電話であそぼう -


Ryoga.exe

自己紹介

Ryoga

  • 筑波大学情報学群情報科学類

  • フロントエンドと組込みの脆弱性が好き

  • 最近は CSS Syntax Module Level 3
    を読んでいます

  • X (Twitter)/mixi2: @Ryoga_exe

背景

時は2025年

筑波大学で電話が流行

電話を連打する間瀬bb

大量の電話が購入

大量に購入された電話 OpenStage 40G という機種

何台がもらって遊ぶことに

どうやら U-Boot する

起動直後の電話の画面

公式 Wiki
  • 古い Linux が動いている
  • admin@ で SSH できる
  • ファームウェアが配布されている

SSH してみる

$ ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa \
-o HostKeyAlgorithms=+ssh-rsa \
-o KexAlgorithms=+diffie-hellman-group14-sha1 admin@...

↑ クソ古いのでクソ長い引数が必要

BusyBox v1.15.3 (2020-09-04 16:43:40 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

Sourcing Opera Environment...
FipsMode from Phone.db = false
OPENSSL_FIPS = 0
$

入れる

謎のリポジトリを発見

https://github.com/fffilimonov/siemen_op_firm/

"firmware repack siemens openstage 40/60/80"

ファームウェアは暗号化されていない

/etc/shadow を見てみる

salt なし MD5-crypt

→ GPU をぶん回す

→ なんと数分で見つかる(クソ短い)

CVE になっているらしい

  • CVE-2024-28065:
    • ファームウェアが簡単に展開できる
  • CVE-2024-28066:
    • root のパスワードがクソ短い

root になれない

  • root@ で SSH が拒否
  • su → root 昇格できない

ps をする

どうやら dropbear が SSH を受けている

$ ll /usr/bin
drwxrwxr-x 2 admin admin 0 Jan 31 2022 .
drwxrwxr-x 7 root root 0 Jan 31 2022 ..
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 [ -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 [[ -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 arping -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 awk -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 basename -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 clear -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 cmp -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 cut -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 13 Jan 31 2022 dropbearkey -> dropbearmulti
-rwxrwxr-x 1 admin admin 177668 Sep 4 2020 dropbearmulti
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 du -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 env -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 expr -> ../../bin/busy
$ ll /usr/bin
drwxrwxr-x 2 admin admin 0 Jan 31 2022 .
drwxrwxr-x 7 root root 0 Jan 31 2022 ..
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 [ -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 [[ -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 arping -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 awk -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 basename -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 clear -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 cmp -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 cut -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 13 Jan 31 2022 dropbearkey -> dropbearmulti
-rwxrwxr-x 1 admin admin 177668 Sep 4 2020 dropbearmulti
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 du -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 env -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 expr -> ../../bin/busy
$ ll /usr/bin
drwxrwxr-x 2 admin admin 0 Jan 31 2022 .
drwxrwxr-x 7 root root 0 Jan 31 2022 ..
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 [ -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 [[ -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 arping -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 awk -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 basename -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 clear -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 cmp -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 cut -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 13 Jan 31 2022 dropbearkey -> dropbearmulti
-rwxrwxr-x 1 admin admin 177668 Sep 4 2020 dropbearmulti
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 du -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 env -> ../../bin/busybox
lrwxrwxrwx 1 admin admin 17 Jan 31 2022 expr -> ../../bin/busy

→ admin admin……🤔

dropbear を書き換えてみる

概要

if (-w があったら) {
root でのログインをしない
...
...
}

概要

if (-w があったら) {
NOP NOP NOP
NOP NOP NOP
}

NOP 埋めする

$ (sh -c 'sleep 60 && cp ... /usr/bin/dropbearmulti') &

書き換えようとするとText file busy と言われるので

60秒後差し替えるように→SSHを止める
→待つ→再起動

こうして root になれた(めでたい)

$ ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa \
-o HostKeyAlgorithms=+ssh-rsa \
-o KexAlgorithms=+diffie-hellman-group14-sha1 root@...

...

# id
uid=0(root) gid=0(root) groups=0(root),10(wheel)

root になれると

$ cat /dev/urandom > /dev/fb0

フレームバッファに書き込める

カーネルモジュールを解析して
任意の画像を表示可能になる

備考

本機種の権限昇格は既知の問題らしい

https://www.pentagrid.ch/en/blog/rce-and-local-root-in-openstage-and-openscape-phones/

たくさんの犠牲に🙏

追記

セキュキャン後、やる気が出たので
音を出すために解析を続けている

↓意味のわからないファイルで発狂している様子

例のドイツの電話機を解析しているが、中身が midi の嘘の wav ファイルで発狂している

[image or embed]

— 📦️ (@ryoga.dev) 2026年8月17日 22:15