Skip to content

[cisco_ftd] Fix 113005 REASON pattern to include locked out and other r… - #20552

Merged
haetamoudi merged 3 commits into
mainfrom
fix/0-extend-the-reason-pattern-definition-in-the-72822784
Aug 6, 2026
Merged

[cisco_ftd] Fix 113005 REASON pattern to include locked out and other r…#20552
haetamoudi merged 3 commits into
mainfrom
fix/0-extend-the-reason-pattern-definition-in-the-72822784

Conversation

@ie-ops

@ie-ops ie-ops commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Executive summary

The fix adds 'Account has been locked out' to the REASON grok pattern for Cisco FTD message 113005. The existing pattern only matched a fixed set of rejection reasons, causing a MISSING_CASE error when the AAA server returned this particular locked-out message. Adding the new reason string to the alternation group allows the grok processor to successfully parse these events.

Proposed commit message

[cisco_ftd] Fix 113005 REASON pattern to include locked out and other r…

Root cause

The REASON pattern_definition in the grok_message_800e7540 processor only lists two rejection reasons (AAA failure|Account has been disabled), but Cisco FTD legitimately emits 'Account has been locked out' and several other valid reason strings for message 113005; the pattern was never extended to cover the full documented set.

Approach

Extend the REASON pattern_definition in the grok_message_800e7540 processor (message ID 113005) from its current two-value alternation to the full set of documented Cisco FTD rejection reasons, mirroring the complete list already present in the cisco_asa integration. Add a pipeline test fixture entry for the 'Account has been locked out' reason using the sanitized event. Bump the package version with a bugfix changelog entry.

Implementation

  1. Step 1: In packages/cisco_ftd/data_stream/log/elasticsearch/ingest_pipeline/default.yml, locate the grok processor at tag grok_message_800e7540 (around line 429). Update the REASON pattern_definition from (AAA failure|Account has been disabled) to (AAA failure|Account has been disabled|Account has been locked out|Invalid password|Password has expired|Password is expiring|Password malformed|Unspecified) — matching the full set used in the cisco_asa integration.
  2. Step 2: In packages/cisco_ftd/data_stream/log/_dev/test/pipeline/test-ftd-fix.log, append the sanitized test event: <182>Jul 7 11:22:54 198.51.100.10 %FTD-6-113005: AAA user authentication Rejected : reason = Account has been locked out : server = 203.0.113.20 : user = ***** : user IP = 192.0.2.30
  3. Step 3: In packages/cisco_ftd/data_stream/log/_dev/test/pipeline/test-ftd-fix.log-expected.json, append the corresponding expected output document for the new test event, including event.action=logon-failed, event.outcome=failure, event.code=113005, destination.address=203.0.113.20, source.address=192.0.2.30, and related.ip entries for both IPs.
  4. Step 4: In packages/cisco_ftd/changelog.yml, prepend a new version entry (3.13.5) with type: bugfix and description: 'Fix grok REASON pattern for 113005 to include Account has been locked out and other valid rejection reasons.'
  5. Step 5: In packages/cisco_ftd/manifest.yml, update the version field to 3.13.5.
  6. Step 6: Run elastic-package test pipeline against the cisco_ftd package to confirm all existing and new test fixtures pass.

Pipeline changes

  • Modify grok_message_800e7540 processor: expand REASON pattern_definition from (AAA failure|Account has been disabled) to (AAA failure|Account has been disabled|Account has been locked out|Invalid password|Password has expired|Password is expiring|Password malformed|Unspecified)

Field / mapping changes

Sanitized error message

Processor 'grok' with tag 'grok_message_800e7540' in pipeline 'logs-cisco_ftd.log-default' failed with message '[on_failure_message]'

Sanitized log (event_sanitized excerpt)

<182>Jul  7 11:22:54 198.51.100.10 %FTD-6-113005: AAA user authentication Rejected : reason = Account has been locked out : server = 203.0.113.20 : user = ***** : user IP = 192.0.2.30

Reviewer concerns

  • The REASON pattern remains a fixed enumeration; any future undocumented rejection reason from Cisco ASA/FTD will cause the same MISSING_CASE failure again. A fallback catch-all pattern (e.g. [^:]+) might be more resilient, but that is a separate enhancement decision.
  • The new test fixture line is missing a trailing newline (\ No newline at end of file), which is cosmetically untidy but functionally harmless for pipeline tests.

Self-review findings

Risk and classification

  • Plan risk level: low
  • Tags: pipeline, processors, test-fixture
  • Impact: medium

Links

  • Issue: (no issue number)
  • Issue title: cisco_ftd.log [MISSING_CASE]: Processor 'grok' with tag 'grok_message_800e7540' in pipeline 'logs-cisc…
  • Pipeline case: 046694414ff152f6

@ie-ops ie-ops added enhancement New feature or request Integration:cisco_ftd Cisco FTD source:integration_sentinel The PR was created via the Integration Sentinel pipeline Team:Integration-Experience Security Integrations Integration Experience [elastic/integration-experience] labels Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

✅ Elastic Docs Style Checker (Vale)

No issues found on modified lines!


The Vale linter checks documentation changes against the Elastic Docs style guide. To use Vale locally or report issues, refer to Elastic style guide for Vale.

@haetamoudi
haetamoudi marked this pull request as ready for review August 5, 2026 13:04
@haetamoudi
haetamoudi requested a review from a team as a code owner August 5, 2026 13:04
@infra-vault-gh-plugin-prod

Copy link
Copy Markdown

Pinging @elastic/integration-experience (Team:Integration-Experience)

- "AAA user (authentication|authorization) Rejected(%{SPACE})?: reason = %{REASON:event.reason}(%{SPACE})?: server = %{IP:destination.address}(%{SPACE})?: user = ?(%{CISCO_USER:source.user.name}|\\*+)(%{SPACE})?: user IP = %{IP:source.address}"
pattern_definitions:
REASON: (AAA failure|Account has been disabled|Invalid password|Password has expired|Password is expiring|Password malformed|Unspecified)
REASON: (AAA failure|Account has been disabled|Account has been locked out|Invalid password|Password has expired|Password is expiring|Password malformed|Unspecified)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Severity: 🟡 Medium confidence: medium path: packages/cisco_ftd/data_stream/log/elasticsearch/ingest_pipeline/default.yml:437

The REASON alternation still omits "Users account has expired", which the sibling cisco_asa package already accepts for the same 113005 message; add it so those logs parse instead of hitting the grok failure handler.

Details

cisco_asa parses the identical %ASA-6-113005 message and its REASON alternation (packages/cisco_asa/data_stream/log/elasticsearch/ingest_pipeline/default.yml:432) is (AAA failure|Account has been disabled|Invalid password|Password is expiring|Password has expired|Password malformed|Unspecified|Account has been locked out|Users account has expired). After this change the cisco_ftd list matches cisco_asa except for Users account has expired. FTD devices emit ASA-formatted 113005 records — the fixtures added by the previous release in test-ftd-fix.log lines 55-58 literally contain the %ASA-6-113005: prefix — so an FTD log with reason = Users account has expired still fails this grok today. The processor has no ignore_failure, so the document falls through to the pipeline's failure handler: event.reason, destination.address, source.user.name and source.address are all left unset and the event is tagged as a parse error. That is the same defect this PR is fixing for the locked-out reason.

Recommendation:

Add the remaining reason string so the FTD list is on par with cisco_asa:

      pattern_definitions:
        REASON: (AAA failure|Account has been disabled|Account has been locked out|Invalid password|Password has expired|Password is expiring|Password malformed|Unspecified|Users account has expired)
        CISCO_USER: ((LOCAL\\)?(%{HOSTNAME}\\)?%{USERNAME}(@%{HOSTNAME})?(, *%{NUMBER})?)

and cover it in the fixture next to the locked-out line in data_stream/log/_dev/test/pipeline/test-ftd-fix.log:

<182>Jul  7 11:22:54 198.51.100.10 %FTD-6-113005: AAA user authentication Rejected : reason = Users account has expired : server = 203.0.113.20 : user = ***** : user IP = 192.0.2.30

then regenerate the expected document with elastic-package test pipeline -g.


🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@haetamoudi The same message appears on #20567, do we want to keep an explicit list or does it make sense to move to a more flexible container for this field ?

Comment thread packages/cisco_ftd/changelog.yml Outdated
@elastic-vault-github-plugin-prod

Copy link
Copy Markdown
Contributor

🚀 Benchmarks report

To see the full report comment with /test benchmark fullreport

@elastic-vault-github-plugin-prod

Copy link
Copy Markdown
Contributor

✅ All changelog entries have the correct PR link.

@vera-review-bot

Copy link
Copy Markdown

No issues across the latest commits 428434f.

Review summary

Issues found across earlier commits ae3c066 — 1 medium, 1 low
  • 🟡 The REASON alternation still omits "Users account has expired", which the sibling cisco_asa package already accepts for the same 113005 message (link) (Unresolved)
  • 🔵 The changelog entry claims "and other valid rejection reasons" but the diff adds exactly one reason (link) (Unresolved)

A new commit triggers another review — at most once every 15 minutes. I skip the PR while it's approved or has merge conflicts.

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

@infra-vault-gh-plugin-prod

Copy link
Copy Markdown

💚 Build Succeeded

History

@mergify

mergify Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Queued — the merge queue status continues in this comment ↓.

@mergify

mergify Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • 🟠 Waiting for queue conditions
  • ⏳ Enter queue
  • ⏳ Run checks
  • ⏳ Merge
Required conditions to enter a queue
  • -closed [📌 queue requirement]
  • -conflict [📌 queue requirement]
  • -draft [📌 queue requirement]
  • any of [📌 queue -> configuration change requirements]:
    • -mergify-configuration-changed
    • check-success = Configuration changed
  • any of [🔀 queue conditions]:
    • all of [📌 queue conditions of queue rule default]:
      • github-review-approved [🛡 GitHub branch protection]
      • github-review-approved [🛡 GitHub repository ruleset rule [org] Require a PR for Renovate]
      • github-review-approved [🛡 GitHub repository ruleset rule [org] Require a PR]
      • any of [🛡 GitHub branch protection]:
        • check-success = CLA
        • check-neutral = CLA
        • check-skipped = CLA
      • any of [🛡 GitHub branch protection]:
        • check-success = buildkite/integrations
        • check-neutral = buildkite/integrations
        • check-skipped = buildkite/integrations

@haetamoudi
haetamoudi merged commit 8ae28fa into elastic:main Aug 6, 2026
9 of 10 checks passed
@mergify

mergify Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

queue

☑️ The pull request has been merged manually

Details

The pull request has been merged manually at 8ae28fa

@elastic-vault-github-plugin-prod

Copy link
Copy Markdown
Contributor

Package cisco_ftd - 3.13.9 containing this change is available at https://epr.elastic.co/package/cisco_ftd/3.13.9/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request Integration:cisco_ftd Cisco FTD source:integration_sentinel The PR was created via the Integration Sentinel pipeline Team:Integration-Experience Security Integrations Integration Experience [elastic/integration-experience]

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants