セキュリティ

Cisco ASAの脆弱性CVE-2026-76418:二次認証の設定確認と8月修正版からの再更新

Cisco ASAの脆弱性CVE-2026-76418:二次認証の設定確認と8月修正版からの再更新

Ciscoは2026年10月28日(日本時間29日)、Cisco Secure Firewall ASAとSecure Firewall Threat Defense(FTD)の脆弱性 CVE-2026-76418 を公表しました。リモートアクセスSSL VPNで二次認証を設定している機器が、認証なしの細工したリクエスト1つで再起動させられるもので、Ciscoは10月中の悪用を確認しています。この記事では、影響を受ける設定の見分け方と判定スクリプト、CSAFを使った影響版の照合、8月のCVE-2026-20349で更新済みの機器も対象に残る理由、緩和策の使い分け、更新の優先度までを実装と運用の目線で整理しました。内容は2026年10月30日時点の公開情報にもとづきます。

まとめ:二次認証を使うASA・FTDは8月の修正版でも対象なので再更新する

CVE-2026-76418の対象は、SSL VPNのログイン画面が外から届き、トンネルグループに二次認証を設定したASAとFTDです。VPNへのログインに成功している必要はありません。回避策は無く、塞ぐ手段はASAなら9.20.4.50などの修正版への更新です。

見落としやすいのは版の関係です。8月に悪用が確認されたCVE-2026-20349の修正版(ASA 9.20.4.49、FTD 7.4.8など)は、今回の影響版一覧にそのまま入っています。8月に急いで更新した機器も、もう一度上げる必要があります。

更新までの間は、二次認証の使い方に応じてグループ一覧を無効にするか、二次認証を外す緩和策を選べます。ただし二次認証を外すとVPNの守りが一段下がるため、更新を数日で済ませられるなら緩和策より更新を先にしてください。社外に開いたVPN機器の版と設定をまとめて点検したい場合は、脆弱性診断・セキュリティ診断で範囲を決めると抜けが出にくくなります。

CVE-2026-76418の中身:二次認証付きトンネルグループで起きる再起動

ASAとFTDは、社外の端末を社内へつなぐリモートアクセスVPNの入口としてよく使われるファイアウォールです。今回の欠陥は、そのSSL VPNのログイン処理のうち、二次認証(パスワードに加えてワンタイムパスワードなどを求める設定)を扱う部分にありました。

CWE-690とCVSS 8.6の内訳と10月に確認された悪用・KEV未登録の現在地

Ciscoのアドバイザリ cisco-sa-asaftd-tunnel-dos-s6mgkb75によれば、原因はトンネルグループに二次認証を設定したときの論理エラーです。攻撃者がSSL VPNへの接続時に細工したリクエストを送ると、機器が予期せず再起動し、VPNが止まります。弱点の分類はCWE-690(戻り値を確かめないことによるNULLポインタ参照)です。

CVSSのベクトルは AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:H で、基本値は8.6です。情報の漏えいや改ざんは無く、影響は可用性だけです。各指標の読み方はCVSSv3の計算式とスコアの目安で確認できます。

アドバイザリは「2026年10月にCisco PSIRTが悪用を把握した」と書いています。発見者はEric Fernald氏で、Cisco TACのサポートケースを解決する中で見つかりました。一方、10月30日に取得したCISAのKEVカタログの最新版(2026.10.28版)には載っていません。KEVの更新はアドバイザリの公開より前だったため、後から追加される可能性があります。JPCERT/CCの2026年の注意喚起一覧にも本件はまだありません。

8月のCVE-2026-20349との違いと修正版が1つずつ上がった版番号の関係

ASAとFTDのSSL VPNでは、8月にも悪用済みのDoS脆弱性が出ています。CVE-2026-20349のアドバイザリは8月11日の公開で、KEVにも同じ日に載りました。2つを並べると、修正版の番号がちょうど1つずつずれています。

項目 CVE-2026-20349 CVE-2026-76418
公表 2026年8月11日 2026年10月28日
条件 SSL VPN等の有効化 加えて二次認証
KEV 8月11日に登録 10月28日版に無し
ASA 9.20系 9.20.4.49 9.20.4.50
ASA 9.24系 9.24.1.26 9.24.1.27
FTD 7.4系 7.4.8 7.4.9
FTD 7.6系 7.6.6 7.6.7

CVE-2026-20349はSSL VPNを有効にしているだけで当たり、今回は二次認証まで設定している機器に絞られます。対象は狭くなりましたが、8月の修正版が今回の影響版に含まれる点が実務上の落とし穴です。後述のCSAF照合でも、9.20.4.49と7.4.8は影響版として出てきます。

影響範囲の確認:webvpnの有効化・グループ一覧・二次認証の3つの設定

アドバイザリが示す条件は、影響版で動いていること、SSL VPNのログイン画面に届くこと、トンネルグループに二次認証を設定していることの3つです。版の照合は次の章に回し、ここでは設定の側を確かめます。

ASAのSSL VPNと二次認証の有効設定をCLIで洗い出す確認コマンド

ASAのCLIでshow running-configを使い、版と、webvpnによるSSL VPN・トンネルグループの設定を出力します。二次認証は、TAC文書116111の設定例にあるとおり、トンネルグループのgeneral-attributesの下にsecondary-authentication-server-groupとして入ります。

show version | include Version
show running-config webvpn
show running-config tunnel-group | include tunnel-group|secondary-authentication

show running-config webvpnの出力にenable outsideのような「enable インターフェース名」の行があれば、SSL VPNが有効です。3行目の出力で、secondary-authentication-server-groupの直前に並ぶトンネルグループ名が、二次認証を設定したグループです。機器が多いときは、show running-configの全文を保存して次のスクリプトに渡すと、判定まで機械的に済みます。

import re
import sys


def blocks(text):
    # 行頭が空白でない行を見出しに、続く字下げ行をその配下としてまとめる
    current = None
    result = []
    for line in text.splitlines():
        if not line.strip() or line.startswith("!"):
            continue
        if not line.startswith(" "):
            current = [line.strip(), []]
            result.append(current)
        elif current:
            current[1].append(line.strip())
    return result


text = open(sys.argv[1], encoding="utf-8").read()
ssl_ifs, group_list, secondary, group_url = [], False, {}, set()
for head, body in blocks(text):
    if head == "webvpn":
        ssl_ifs = [b.split()[1] for b in body if re.match(r"enable \S+", b)]
        group_list = "tunnel-group-list enable" in body
    m = re.match(r"tunnel-group (\S+) general-attributes", head)
    if m:
        for b in body:
            if b.startswith("secondary-authentication-server-group"):
                secondary[m.group(1)] = b.split()[1]
    m = re.match(r"tunnel-group (\S+) webvpn-attributes", head)
    if m and any(b.startswith("group-url") for b in body):
        group_url.add(m.group(1))

print("SSL VPNを有効にしたインターフェース:", ssl_ifs or "なし")
print("tunnel-group-list enable:", "あり" if group_list else "なし")
# グループ一覧が無効でも DefaultWEBVPNGroup は必ず確認対象になる
targets = secondary if group_list else {
    k: v for k, v in secondary.items() if k == "DefaultWEBVPNGroup"}
for name, server in secondary.items():
    if name in targets:
        mark = "確認対象"
    elif name in group_url:
        mark = "group-urlで直接入れるため要確認"
    else:
        mark = "一覧無効のため対象外"
    print(f"  二次認証あり: {name} ({server}) -> {mark}")
if not ssl_ifs:
    verdict = "SSL VPNが無効のため条件に該当しない"
elif targets:
    verdict = "影響条件に該当"
elif group_url & secondary.keys():
    verdict = "要確認(group-urlのグループに二次認証あり)"
else:
    verdict = "設定上は条件に該当しない"
print("判定:", verdict)

python asa_cfg_check.py asa01.cfg のように保存した設定ファイルを渡します。2026年10月30日に、二次認証付きグループとグループ一覧を持つサンプル設定で実行し、「影響条件に該当」と出ることを確かめました。標準ライブラリだけで動き、機器には接続しません。

DefaultWEBVPNGroupとグループ一覧の有無で変わる確認対象の範囲

どのトンネルグループを見るかは、ログイン画面にグループの選択欄を出すtunnel-group-list enableの有無で変わります。この設定はwebvpnの設定モードで入れるもので、書式はTAC文書98580で確かめられます。

  • グループ一覧が有効:既定のDefaultWEBVPNGroupを含む全グループが対象。選択欄に出ていないグループも含む
  • グループ一覧が無効:DefaultWEBVPNGroupの二次認証だけを見る。一覧を消しても既定グループの二次認証は残る
  • どちらの場合も、VPNへのログイン成功は要らない

アドバイザリには、group-urlで特定のグループへ直接入れる構成についての記載がありません。スクリプトではこれを「要確認」に分けています。URLを知っていれば誰でもそのグループのログイン処理に届くため、私たちは対象と同じ扱いで更新を急ぐのが安全だと判断しています。

FMC・FDM管理のFTDで確かめる画面とshow version systemの読み方

FTDでは、管理ツールの画面でリモートアクセスVPNの方針を見ます。FMCなら「Devices > VPN > Remote Access」、FDMなら「Remote Access VPN」です。アドバイザリは、画面の方針だけでなく、展開後に機器へ入った実際の設定も確かめるよう求めています。

版は、TAC文書217663のとおり、FTDのCLIでshow version systemを実行すると機種・版・稼働時間が出ます。なお、クラウド提供のFirewall(CDFW)とそのFMC(cdFMC)、Secure Access、オンプレミスのSecure FMC自体は影響を受けないとアドバイザリに明記されています。

CSAFで影響版を照合するPythonスクリプトと修正版への更新経路

ASAの版は「9.20.4.49」のように4桁まで細かく分かれており、目で表を追うと取り違えが起きます。Ciscoは機械可読のアドバイザリ(CSAF形式)を出しているので、版の判定はそちらに任せます。

CSAFのJSONからASA142版・FTD67版を引いて自社の版と照合する手順

アドバイザリにはCSAF形式のJSONが付いています。次のPythonは、影響版の一覧を取り出し、引数で渡した版と突き合わせます。

import json
import sys
import urllib.request

ADV = "cisco-sa-asaftd-tunnel-dos-s6mgkb75"
CSAF_URL = ("https://sec.cloudapps.cisco.com/security/center/content/"
            f"CiscoSecurityAdvisory/{ADV}/csaf/{ADV}.json")


def leaves(node, family, table):
    # product_tree をたどり、product_id から(製品ファミリ, 版)を引く表を作る
    for branch in node.get("branches", []):
        fam = branch["name"] if branch["category"] == "product_family" else family
        product = branch.get("product")
        if product:
            table[product["product_id"]] = (fam, branch["name"])
        leaves(branch, fam, table)
    return table


req = urllib.request.Request(CSAF_URL, headers={"User-Agent": "Mozilla/5.0"})
csaf = json.load(urllib.request.urlopen(req, timeout=30))
table = leaves(csaf["product_tree"], "", {})
status = csaf["vulnerabilities"][0]["product_status"]

# known_affected は「版のID:機種のID」の組なので、前半だけを見る
affected = {}
for pid in status["known_affected"]:
    fam, ver = table[pid.split(":")[0]]
    short = "ASA" if "(ASA)" in fam else "FTD"
    affected.setdefault(short, set()).add(ver)

for short, vers in sorted(affected.items()):
    print(short, "影響版の数:", len(vers))

# 引数は「ASA:9.20.4.10」「FTD:7.4.2」の形で渡す
for arg in sys.argv[1:]:
    short, ver = arg.split(":", 1)
    hit = "影響版一覧に該当" if ver in affected.get(short, set()) else "一覧に無し"
    print(arg, hit)

python csaf_asa_check.py ASA:9.20.4.49 ASA:9.20.4.50 FTD:7.4.8 FTD:7.4.9 のように実行します。2026年10月30日の取得では、影響版はASAが9.16.1から9.24.1.26までの142版、FTDが7.0.0から10.1.0までの67版でした。9.20.4.49と7.4.8は該当、9.20.4.50と7.4.9は一覧にありません。このCSAFは影響版のIDが「版:機種」の組になっているため、コロンの前だけを使っています。

ASA 9.16.4.104・FTD 7.4.9など系列ごとの最初の修正版一覧

アドバイザリの修正版の表は次のとおりです。自社の系列の行を見て、その版以上へ上げます。

ASAの系列 最初の修正版 FTDの系列 最初の修正版
9.16以前 9.16.4.104 7.0以前 7.0.11
9.18 9.18.4.96 7.2 7.2.13
9.20 9.20.4.50 7.4 7.4.9
9.22 9.22.3.200 7.6 7.6.7
9.23 9.23.1.48 7.7 7.7.14
9.24 9.24.1.27/9.24.10.1 10.0 10.0.3
- - 10.1 10.1.1

9.22系の修正版は9.22.3.200で、8月の9.22.3.26から番号が大きく飛んでいます。版を文字列として比べるスクリプトでは「9.22.3.26」のほうが大きいと判定されるため、自前で比較するなら数値の組に分けてから比べてください。

9.19系とFTD 7.3系など修正版の行が無い系列の移行先の決め方

CSAFでは、ASA 9.19系(9.19.1から9.19.1.42)とFTD 7.3系(7.3.0から7.3.1.2)も影響版に入っています。ところが修正版の表にはこの2系列の行がありません。これらの系列には修正版が出ていないため、表にある系列の修正版へ移ることになります。

移行先は、いまの系列より新しく、機種がサポートしている系列から選びます。ASA 9.19.1.42なら9.20.4.50か9.22.3.200が候補で、FTD 7.3系なら7.4.9以上です。系列をまたぐ更新は設定の書き換えや管理ツール側の対応版にも関わるため、通常の更新より検証の時間を多めに取ってください。9.16より古い系列も、表の「9.16以前」の行にしたがい9.16.4.104以上へ上げます。

更新までの緩和策:グループ一覧の無効化と二次認証を外すかの判断

アドバイザリは回避策を「なし」としつつ、二次認証の使い方に応じた緩和策を2つ挙げています。どちらもテスト環境で効果が確かめられたものですが、Ciscoは一時的な対処と位置づけ、更新を強く勧めています。

no tunnel-group-list enableの緩和効果と構成別の判断基準

既定のDefaultWEBVPNGroupに二次認証を設定していない場合は、webvpnの設定モードでグループ一覧を無効にします。

configure terminal
webvpn
 no tunnel-group-list enable
end
write memory

これでログイン画面のグループ選択欄が消え、二次認証付きのグループへは一覧からたどれなくなります。代わりに利用者は接続先のグループ名を自分で知っている必要があり、社内の手順書や接続プロファイルの配布を直す手間が出ます。group-urlで直接入る運用の組織は、この緩和策だけで閉じたと考えないでください。

DefaultWEBVPNGroup自体に二次認証を設定している場合、一覧を消しても効きません。このときの緩和策は、既定グループのgeneral-attributesでno secondary-authentication-server-groupを実行して二次認証を外すことです。

二次認証を外す緩和策を採らない場面と当日中に更新を優先する基準

二次認証を外す緩和策は、多くの組織では採らないほうがよいと考えます。パスワードだけの認証では、漏えいした認証情報でのログインを止められません。二次認証はそれを止める壁です。停止させられるリスクを消す代わりに、侵入されるリスクを上げる交換になります。

判断の基準は単純です。冗長構成のASAで片側ずつ更新でき、数日以内に保守時間を取れるなら、緩和策を入れずに更新を先にします。グループ一覧の無効化で済む構成なら、更新までのつなぎとして入れてよいでしょう。二次認証を外すのは、単体構成で更新の目処が立たず、VPNの停止が業務を止める場合に限ります。その場合も外す期間を決め、元に戻す日を作業計画に書いておきます。

社外に開いたVPNの入口そのものを減らす方向で考えるなら、ゼロトラストネットワーク(ZTNA)とVPNの違いと製品選定も判断材料になります。

再起動が攻撃によるものか確かめる初動とASA更新の優先度の決め方

今回の攻撃が成功すると、機器は再起動します。データが盗まれる種類の欠陥ではありませんが、再起動を繰り返されれば、そのたびにVPN利用者の接続が切れ、業務が止まります。

show versionの稼働時間と再起動理由で予期しない再起動を拾う方法

TAC文書217663は、予期しない再起動を調べる最初の手順として稼働時間の確認を挙げています。機器が最後に起動してからの経過時間は、ASAならshow version、FTDならshow version systemの出力に含まれます。保守で再起動していないのに稼働時間が短ければ、何かが起きた合図です。

アドバイザリは侵害の痕跡(IOC)を示していません。このため、攻撃による再起動だと断定する手段はまだありません。実務では、稼働時間が短い機器について、再起動の直前にSSL VPNのログイン画面へ届いた接続元をファイアウォールやSIEMのログで洗い、同じ接続元からの繰り返しが無いかを見ます。機器がクラッシュした際のコアファイルや再起動理由の取り方も217663にまとまっているので、TACへ相談する前に採取しておくと調査が早く進みます。

社外にSSL VPNを開いたASAから当日中に更新する優先度の判断

最優先は、二次認証付きのグループがあり、SSL VPNのログイン画面がインターネットから届くASAとFTDです。悪用は確認済みで、攻撃に認証は要りません。今日のうちに更新の手配に入ります。8月のCVE-2026-20349で9.20.4.49などへ上げたばかりの機器も、ここに入ります。

次が、二次認証を設定していない機器です。今回の条件からは外れますが、8月の修正版より古い版で動いていれば、悪用済みのCVE-2026-20349がまだ開いています。こちらも次の保守を待たずに更新する対象です。どちらにも当たらないなら、月次の計画更新で足ります。

ASA以外のVPN機器も含めて、版をKEVと突き合わせる仕組みを社内に作るなら、VPN機器の版確認コマンドとKEV照合スクリプトが土台になります。点検の範囲を決めて外部に任せる場合の進め方は、脆弱性診断の種類と進め方・外注時の判断基準で確認できます。

Cisco ASAのCVE-2026-76418対応でよく受ける質問と回答

CVE-2026-76418の対応を進める中で出てきやすい疑問に、公開されている一次情報の範囲で答えます。

二次認証を使っていないASAは更新しなくてもよいですか?

CVE-2026-76418の条件からは外れますが、更新が不要とは限りません。8月に悪用が確認されたCVE-2026-20349は、SSL VPNやIKEv2のリモートアクセスを有効にしているだけで当たります。版がその修正版(ASA 9.20系なら9.20.4.49)より古ければ、そちらを塞ぐために更新が必要です。同じ機会に今回の修正版まで上げれば、手間は1回で済みます。

IPsec(IKEv2)だけでSSL VPNを使っていない場合も対象ですか?

アドバイザリが条件に挙げているのは、webvpnの設定でSSL VPNを少なくとも1つのインターフェースで有効にしていることです。show running-config webvpnに「enable インターフェース名」の行が無ければ、今回の条件には当たりません。ただし8月のCVE-2026-20349は、クライアントサービス付きのIKEv2リモートアクセスも条件に含んでいるため、そちらの修正版は確かめてください。

8月のCVE-2026-20349で更新した直後なのに、また更新が必要ですか?

必要です。CSAFの影響版一覧では、各系列の最後の影響版が8月の修正版と一致しています。たとえばASA 9.20系なら9.20.4.49が影響版で、修正版は9.20.4.50です。8月の更新は無駄ではなく、CVE-2026-20349を塞いだうえで、今回の欠陥が残っている状態です。二次認証を使っているなら、改めて更新してください。

JPCERT/CCの注意喚起やCISAのKEV登録は出ていますか?

2026年10月30日の確認では、JPCERT/CCの2026年の注意喚起一覧に本件はありません。CISAのKEVカタログも、取得した2026.10.28版には載っていませんでした。ただしCiscoが悪用を確認しているため、KEVに載るのは時間の問題と見ています。8月のCVE-2026-20349は公表と同じ日に載り、期限は3日後でした。期限の決まり方はBOD 26-04の是正期限の決まり方で解説しています。

Cisco Software Checkerと今回のCSAFスクリプトはどう使い分けますか?

CiscoのSoftware Checkerは、版を入れると、その版に当たるアドバイザリをまとめて示すWebの道具です。1台の機器について今回以外の脆弱性も含めて確かめたいときに向きます。CSAFスクリプトが向いているのは、1つのアドバイザリについて多数の機器の版を一度に判定したいときです。資産台帳から版の一覧を流し込めば、数十台でも数秒で済みます。

関連記事

お気に入りに入れた記事の一覧

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.27 テックブログ Brotli 脆弱性:CVE-2026-111497の影響確認とNode.js・Python・.NETの更新手順
  2. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処
  3. 2026.10.27 テックブログ Joshin(ジョーシン)不正アクセス:最大600万件の対象とサブスク初期パスワードの対処
  4. 2026.10.29 テックブログ So-net情報漏洩:258万件の対象確認とメールのパスワード再設定、窓口の番号
  5. 2026.10.23 テックブログ Renta!はいつ再開?不正アクセスでメールアドレス等が流出したおそれ・再開時のパスワード再設定と運営側の対応

RELATED POSTS 関連記事

目次