SSH ホール

2026/11/05 21:19

SSH ホール

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

musl ベースの Linux 分布(Alpine、OpenWrt、Buildroot、Yocto など)に実装されている OpenSSH は、パスワード認証が有効化されていながら PAM が使用されていない環境におけるシステムで重大なセキュリティ欠陥を有しています。この脆弱性により、攻撃者が 256 文字を超える長さのパスワードを提供した場合、

/etc/shadow
ファイル内で
*
を設定したアカウント(例:root、LDAP ユーザーなど)に対するパスワードチェックを回避できます。この問題は、musl ライブラリの認証失敗処理に関する 2012 年の変更および、256 バイトを超える無権限な入力に対するハッシュ検証の特定の動作に起因しています。新規で既存のパスワードのないシステムには影響はありませんが、これらの分布を運用する組織は、アカウント乗っ取りの重大なリスクに直面しています。この即座の脅威に対処するためには、管理者は OpenSSH バージョン 10.6p2 にアップグレードするか、あるいは完全にパスワード認証を無効化する必要があります。なお、この脆弱性は主に PAM が利用されていない環境に影響を与えるものであり、PAM を使用している場合、標準的なハンドリングによりこの特定の攻撃ベクトルを防ぐ可能性があります。この問題に対処しないことは、以前に誤設定されたアカウントに関連した主要なインシデントと同程度の不正アクセスにつながりかねません。

本文

256 バイト以上のパスワードを受け付けてしまうセキュリティ脆弱性

Alpine Linux や OpenWrt、Docker イメージなどで広く使用されている musl ライブラリは、2016 年以来長年、深刻なセキュリティ上の不具合を抱えていました。 本来はパスワードを設定すべきではないアカウント(root ユーザー、SSH キー認証専用ユーザーなど)に対し、256 バイトより長いパスワードを受け付けてしまうという問題です。

歴史的背景:なぜ「*」なのか?

1980 年:最初の星号

古い Unix システムではパスワードが

/etc/passwd
に平文で保存されていました。

  • ビル・ジョイは、ログイン不可のアカウント(
    daemon
    )に対し、パスワードとしてアスタリスク
    *
    を設定しました。
  • *
    はハッシュ値ではないため、マッチングすることはありません。現代でもこの仕組みは維持されています。

1990 年代:sshd の認証と crypt()

現代ではパスワードハッシュは

/etc/shadow
に格納され、
$6$...
(SHA512) の形式になります。

  • 正常なケース: ユーザー入力 → ハッシュ化 → 保存値と比較 → ログイン成功/失敗
  • 星号のケース: フィールドが
    *
    なら、マッチング対象がないためログイン不可

crypt() 関数の仕様(1997)

Single Unix Spec では、

crypt()
が計算できない場合(サポートされていないアルゴリズムなど)は NULL を返すと定義されています。

  • しかし多くのプログラムは NULL チェックを行わず、比較時にクラッシュしていました。

2012 年:musl の対応変更

Alpine で使用される musl C ライブラリが仕様を変更しました。

  • 変更内容:
    crypt()
    は失敗しても NULL を返しなくなり、代わりに単一の文字を返すようにしました。
  • 選ばれた文字: アスタリスク
    *
    • コミット: b3c4cc12
    • 理由: "報告された通りである"(NULL でクラッシュするリスク回避)

2012 年:SHA512 クリプトの追加と制限

musl は SHA512 を実装しましたが、パスワードが長ければ長いほどハッシュ化に時間がかかるため、サーバーへの攻撃を容易にしました。

  • 対策: パスワード長を 256 バイト で制限。それ以上は拒否。
  • 致命的な不具合: SHA512 クリプトが失敗すると、前述のように
    crypt
    は
    *
    を返す仕様です。
    • コミット: 88bf5a8a (変更から 20 日後)
    • 結果: 256 バイト超のパスワードを受け付けた場合、システムは
      *
      を返すことで「ログイン拒否」と判断してしまうが、実際にはハッシュ化すらされない状態に陥る。

脆弱性の連鎖:2016〜2026

2016 年:CVE-2016-6210(タイミング攻撃)

sshd は、存在しないユーザーへの問い合わせは即時返答、実在ユーザーには数ミリ秒遅れて返答するため、ユーザー名の列挙が可能でした。

  • 対策: ユーザーが存在しない場合やハッシュ化できない(
    *
    のような)場合でも、別のアカウントのソルトを使って時間稼ぎをし、応答を遅らせます。
  • 問題点: この「遅延」は、パスワードが
    *
    である実在ユーザーにも適用されるようになり、セキュリティ監査に誤解を与えました。

2019〜2022 年:Alpine の root アカウント修正

Alpine Linux は CVE-2019-5021 で root パスワード未設定を発見し対応しました。

  1. 2019 年: root を
    !
    でロック。しかし PAM を使わない環境では SSH キー認証も無効化される問題発生。
  2. 2022 年 (Alpine 3.16): root のパスワードを
    *
    に変更し、ロック状態を保ちつつキー認証を再開。

静的な十年:誰も気づかなかった理由

なぜこの問題は長年にわたり見過ごされたのか?

  • crypt()
    が
    *
    を返すのは musl の実装振る舞いであり、OpenSSH や glibc では直接テストされていませんでした。
  • PAM モジュールを介している環境では、
    *
    に対して直接
    crypt()
    を呼び出さないため問題が発生しませんでした。
  • /etc/shadow
    に
    *
    が存在するのは「誤作動」や「長すぎるパスワード試行」の後に限られるため、初期状態での攻撃対象になり得ないと判断されました。

関連する過去の問題

  • Debian (#714219, 2013): glibc へ musl の
    "*"
    コピー提案あり。6 年後に
    libxcrypt
    に移行し、
    "*0"
    (バグ修正)へ変更された。
  • musl メーリングリスト (2024):
    passwd
    コマンドが 257 文字でクラッシュする問題報告(同様の
    "*"
    ロジック)。
  • OpenSSH セキュリティレビュー (2026 年): バグがコードの四行下にあり、発見されたのは修正から数日前。

脆弱性の概要:私たちが直面した問題

OpenSSH の認証コードを調査中に、約 17,600 回の奇妙なログイン試行を行い、以下の事実を確認しました。

  • 対象: musl を使用し、PAM を使用しない sshd(Alpine 標準など)。
  • 現象: 許容されないパスワード(256 バイト超の文字列)を受け付け、「許可」したように振る舞う。
    • 原因:
      crypt()
      が失敗して
      *
      を返すため、sshd がこれを「ハッシュ値が一致しない=拒否」と誤判断し、結果として認証プロセスが完了してしまう不整合があった。

TL;DR:被害状況と対策

ご自身の環境に被害はありませんか?

以下の条件を満たす場合、257 バイトから 1024 バイトまでのあらゆるパスワードを受け付けてしまいます。

  • musl を使用しているか? (Alpine Linux, OpenWrt, Buildroot, Yocto など)
  • PAM を使用していないか? (
    /etc/shadow
    にあり、
    UsePAM no
    の設定)
  • パスワード認証が有効か?
  • パスワードフィールドが
    *
    であるアカウントがあるか?
    • 例:Alpine の root ユーザー、LDAP ユーザー、キー認証専用ユーザーなど。

被害対象例:

  • Alpine 公式の AWS/Azure イメージ: デフォルトユーザーが該当し、パスワード不要で
    doas
    を使えるため、実質的に root 権限を不正取得できてしまう可能性があります。
  • Debian/Ubuntu/Fedora: PAM を経由しているため影響なし。
  • Dropbear/OpenBSD: 影響なし。

次に何をするか(修正手順)

1. パッケージを更新する(推奨)

OpenSSH 10.6p2 でこの問題が修正されています。

# Alpine の場合
apk upgrade openssh

# その他の musl ベースのシステム
sudo apt update && sudo apt install --only-upgrade openssh-server # Debian系の場合など

2. 更新ができない場合(即時対策)

パスワード認証を無効化します。

# パスワード認証を無効化する設定を追加
echo "PasswordAuthentication no" > /etc/ssh/sshd_config.d/00-no-passwords.conf

# サービス再起動
rc-service sshd restart
# または systemd 系の場合
systemctl restart sshd

3. ハッキングされていないか確認する

root ユーザーがパスワードなしでログイン可能になっているか、以下のリポジトリを参照してください。

  • github.com/oz9un/sshole
    • root@your-box
      と表示されれば、脆弱性が存在することを示唆します。

もし既にハッキングされていたら…

ご安心ください。これは既知の問題であり、上記の更新または設定変更で回避可能です。ただし、重要なデータへのアクセス権限を失くした場合は、リセット作業が必要になる場合があります。

同じ日のほかのニュース

一覧に戻る →

2026/11/06 5:03

誰でも使える Kagi シーach

## Japanese Translation: 2025年11月以降、Kagi はプライバシー重視の検索エンジンから、ノートンヌーク(Notesnook)やエンテ(Ente)といったサードパーティ製サービスとの統合機能を備えた包括的なエコシステムへと進化しました。主な進展には、Python 実行機能を備えた研究アシスタント向けのネイティブモバイルアプリのリリース、2026年秋における Android 版のための大幅な UI リデザイン、そして音声検索、画像貼り付け、Wolfram Alpha 連携といった高度なツールの追加が含まれます。プライバシー重視の理念を維持するために、Kagi はユーザーが AI コンポーネントを完全に無効化できる詳細な制御機能を実装するとともに、IPv6 アドレスのホワイトリスト追加やプレミアム会員向けに Claude 4.5 のような新しいモデルを追加する機能を導入し、ニュースフィードにおけるトラッキングをゼロに抑えました。コンテンツ品質に関する懸念に対処するためにも、コミュニティが低品質な AI コンテンツを報告できる「SlopStop」の起動を行いました。今後の展開としては、Ultimate 会員向けに専用モデルを提供するとともに、開発者向けの新 API を提供し、学生やプロフェッショナルに対し高精度で透明性の高い研究ツールを供与し続けています。 ## Key Points List: (ここに Stage 1 の出力を貼り付けてください)

2026/11/06 7:17

Claude Code がメールアドレスをウェブサイトへ送信します

## Japanese Translation: キーポイントリストは、未特定の実事件に対する複数の個人からの一連の反応から構成されています。氏名が記載されている人物には、Klughertz、Jonathan、Netkas、Sebastian Hooker、ryanlsmith、Tyler Coffman、InventorBlack、TacoDevs、Luis Diaz、Dan Avery、wei が含まれており、その他に 27 名の反応もあるとの注記があります。 ## Text to translate The Key Points List consists of a series of reactions from various individuals to an unspecified event. The named figures include Klughertz, Jonathan, Netkas, Sebastian Hooker, ryanlsmith, Tyler Coffman, InventorBlack, TacoDevs, Luis Diaz, Dan Avery, and wei, along with a note that 27 others also reacted.

2026/11/05 23:44

アルパイン Linux セキュリティ情報:OpenSSH サーバーパスワード認証バイパスの脆弱性

## Japanese Translation: OpenSSH の重大なセキュリティ欠陥は、Alpine Linux リリース 3.16 から 3.24、および旧版のサポート終了済みエディションに影響し、デフォルトのクラウドイメージや標準のキーのみユーザーも含まれます。この脆弱性により、PAM を使用せずにシステムが構築されている場合(`UsePAM no`)で、「*」(または空欄/非常に長いパスワードフィールド)を持つアカウントと、少なくとも SHA-256 (`$5`) または SHA-512 (`$6`) を使用する 1 つのアカウントがペアになっている場合、攻撃者はパスワードなしでログインできます。根本原因は、保存されたパスワードフィールドが短すぎる場合、システムが別のアカウントの塩(salt)を再利用する論理エラーであり、これにより `crypt()` 関数が空のパスワードフィールドに対して攻撃者が提供する長い文字列を誤って一致させることになります。この攻撃は単一の接続で、最小限のネットワークトラフィックで成功します。 影響を受けるシステムには、PAM を使用せずに `openssh-server` または `openssh-server-pam` を実行するものがあり、`UsePAM yes`、パスワード認証が無効化されている(`PasswordAuthentication no`)、またはアカウントがロックされている(`/etc/shadow` の「!」)システムは影響を受けません。脆弱なユーザーには通常、「root」アカウント(ログインが許可されている場合)、`adduser` または `usermod -p '*'` で作成されたキーのみユーザー、`musl-nscd` を通じてディレクトリサービスから来るユーザー、および公式の tiny-cloud イメージ内の `alpine` ユーザーが含まれます。 組織は即座に脆弱なパッケージをパッチ適用済みバージョン(edge では `10.6_p2-r0`、stable ブランチでは特定のリリース;例:3.16 用は `9.0_p1-r6` から 3.24/edge 用までの `10.6_p2-r0`)にアップグレードする必要があります。アップデートが不可能な場合、管理者は `/etc/ssh/sshd_config.d/00-no-passwords.conf` を作成し、`/etc/ssh/sshd_config` を修正してパスワード認証を無効化し、`sshd` を再起動するべきです。専門家らは、`root` アカウントを侵害される前に積極的な搾取試みを検出するために、システムログ(例:`/var/log/messages`)を監視し、「Accepted password」のエントリを確認することを推奨しています。この脆弱性は OpenSSH 10.6p2 で修正され、stable ブランチにバックポートされました。報告当時、CVE ID は割り当てられていませんでした。クレジットは Özgün Kültekin(発見者)、Damien Miller と Darren Tucker(修正/リリース)、Timo Teräs(分析)、Natanael Copa(パッケージビルド)にいきます。