MikroTikの静かなパッチ解読:SSHユーザー名「-2」からRouterOSフル管理者へ
RouterOS 7.23.4の詳細な分析により、レガシーなファイルディスクリプタログイン転送を介して読み取り専用のSSHセッションがフル管理者に昇格できる静かなセキュリティ修正が明らかになりました。
2026年9月3日、MikroTikはRouterOS 7.23.4、7.24.2、6.49.21をリリースし、簡潔なアドバイザリを発表しました:「重要なセキュリティアップデート...現時点では詳細情報を公開していません。」翻訳すると、彼らは厄介な問題を発見し、フリートがパッチを適用するまで詳細を伏せているということです。しかしNick Pratleyが指摘するように、修正済みバイナリを全員に配布することは、差分自体が開示となります。彼は両バージョンを取得し、差分をリバースエンジニアリングしました—AI支援で6時間で。
重要なチェンジログの1行
3つのブランチすべてにわたって、単一の調整されたエントリが際立っています:*) ssh - SSH内部プロセスをリファクタリングし、システム安定性を向上; パッチ適用済みリリースに存在し、7.23.3にはありません。これは深刻な修正の指紋です。
NPKの抽出
RouterOSはNPKファイルとして配布されます。x86ベースパッケージは約20MBで、認証は不要です。内部にはxz圧縮のsquashfs 4.0があります。それを切り出してunsquashします—使い捨てのAlpineコンテナが不足しているunsquashfsを処理します。
RouterOSは/nova/bin/の下にある小さな「nova」プロセスの群れであり、マスターloaderによって仲介されます。SSHサーバーはバンドル内にあり、クライアントとサーバーは同じバイナリです。主要ファイル:sshd(sshとバイト単位で同一)、libucrypto.so(暗号化)、およびlibumsg.so(メッセージバス+ログイン処理)。
シンボルレベルの差分はバイトレベルのノイズに勝る
素朴なcmpは、挿入されたバイトがアドレスをシフトするため170KBの差分を報告します。シグナルはシンボルテーブルにあります。変更されたELF全体で動的シンボルを差分すると、ストーリーが明らかになります:libumsg.soはvalidLoginParamInputを獲得し、libucrypto.soはparseHashFromDerEncodedを変更し、mtgetはsnprintfと「ファイル名が長すぎます」エラーを追加します。
ピース1:「-2」はユーザー名ではなくファイルディスクリプタ
新しいvalidLoginParamInputは、-またはスペースで始まる値、スペースで終わる値、または制御バイトを含む値を拒否します。しかし本当のシンクは/nova/bin/loginにあり、レガシーな転送があります:位置引数が-で始まる場合、ダッシュを削除し、残りをatoiで解析し、そのファイルディスクリプタから最大4096バイトを読み取ります。対話型SSHの場合、fd 0、1、2はPTYスレーブの複製です。したがって、ユーザー名-2は「stderr/PTY fd 2から信頼されたログイン位置引数を読み取る」ことを意味します。
2番目のフィールドはstrtoulを介して認証ポリシーマスクになります。カノニカルモードのPTYはフレーミングを複雑にします:2つのNUL終端フィールドに続いて2つのVEOFバイト(0x04 0x04)が必要で、読み取りをきれいに終了します。
0\x00 654958\x00 \x04\x04これにより、RouterOSの正規化されたフル管理者セットである0x9fe6e(654958)の完全なポリシーマスクが得られます。
再現:読み取り専用からフル管理者へ
ユーザー名-2に制限された使い捨てのRADIUSレスポンダーを使用して、外部セッションはグループreadとして記録されました。fd-2ブロックの後、コンソールはフルポリシーで開きました。証明::put [/system identity get name]はCHRを返し、その後書き込み操作がIDをminus2-proofに変更し、元に戻しました。
バリデータは表面的なものではありません—この信頼されたargv/ポリシーインジェクションを閉じます。mtgetオーバーフローは、独立して到達可能なメモリ破壊プリミティブです。mtgetへの低指数RSA署名偽造は3番目のバグであり、まだ資格情報なしで完全に再現されていません。
修正済みバイナリを地球全体に配布するなら、新旧の差分が開示となる。
| リリース | 日付 | SSH修正 | その他の修正 |
|---|---|---|---|
| 7.23.4(長期サポート) | 2026-09-03 | あり | mtgetオーバーフロー、RSA署名偽造 |
| 7.24.2(安定版) | 2026-09-03 | あり | 上記と同じ |
| 6.49.21(v6) | 2026-09-03 | あり | SSH修正のみバックポート |
| 7.23.3(以前) | 2026-09-03以前 | なし | 脆弱 |
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。