Skip to content

Solution: Cyren CrowdStrike IOC Automation (Official)#13658

Open
mazamizo21 wants to merge 14 commits intoAzure:masterfrom
Data443:feature/cyren-cs-ioc-v3.0.1
Open

Solution: Cyren CrowdStrike IOC Automation (Official)#13658
mazamizo21 wants to merge 14 commits intoAzure:masterfrom
Data443:feature/cyren-cs-ioc-v3.0.1

Conversation

@mazamizo21
Copy link
Contributor

New Solution: Cyren-CrowdStrike-ThreatIntelligence v3.0.1

Overview

This solution deploys a Logic App playbook that syncs Cyren threat intelligence indicators (IP reputation and malware URLs) to CrowdStrike Falcon as IOCs for automated threat detection and blocking.

Solution Details

  • Publisher: Data443 Risk Mitigation, Inc.
  • Solution ID: data443riskmitigationinc1761580347231.azure-sentinel-solution-cyren-cs-ioc-automation
  • Version: 3.0.1
  • Type: Playbook (Logic App)

Resources Deployed

Resource Type Purpose
Logic App Microsoft.Logic/workflows Polls Cyren feeds → pushes IOCs to CrowdStrike Falcon API
Role Assignment Sentinel Contributor Logic App managed identity → workspace

Files (9)

File Purpose
Package/mainTemplate.json ARM template with contentTemplates + contentPackages
Package/createUiDefinition.json Deployment UI definition
Package/3.0.1.zip Current version package
Package/1.0.0.zip Previous version (preserved per policy)
Playbooks/CyrenToCrowdStrike_Playbook.json Standalone playbook template
Data/Solution_CyrenCrowdStrike.json Solution metadata
SolutionMetadata.json Solution metadata
ReleaseNotes.md Version history
Package/testParameters.json Test parameters

Relationship to Existing Solutions

This is the Cyren-branded version of the existing TacitRed-IOC-CrowdStrike solution (PR #13269, merged). Both use the same Logic App architecture but connect to different threat intelligence feeds:

  • TacitRed → TacitRed API (compromised credentials)
  • Cyren → Cyren CCF feeds (IP reputation, malware URLs)

Partner Center

  • Offer ID: azure-sentinel-solution-cyren-cs-ioc-automation
  • Publisher: data443riskmitigationinc1761580347231

@mazamizo21 mazamizo21 requested review from a team as code owners February 19, 2026 14:40
@v-shukore v-shukore added the New Solution For new Solutions which are new to Microsoft Sentinel label Feb 20, 2026
@v-maheshbh
Copy link
Contributor

Hi @mazamizo21

Kindly package this as a new solution with version 3.0.0 and update the release notes accordingly.

Thanks!

@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh,

Done — repackaged as v3.0.0 per your request.

Changes made:

  • _solutionVersion bumped from 3.0.1 → 3.0.0 in mainTemplate.json
  • Version field updated to 3.0.0 in Solution_CyrenCrowdStrike.json
  • Package/3.0.1.zip replaced with Package/3.0.0.zip (mainTemplate.json + createUiDefinition.json)
  • ReleaseNotes.md updated with a v3.0.0 entry covering: NDJSON fix, feedId camelCase correction, PersistentToken pagination, CrowdStrike Falcon Custom IOC endpoint validation, and hidden Sentinel tags

Please let me know if any further changes are needed.

Thanks!

@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — same here, repackaged as v3.0.0 per your guidance. Ready for review when you get a chance. Thanks!

@v-maheshbh
Copy link
Contributor

Hi @mazamizo21

Kindly remove the 1.0.0 zip as it is not required and update the release notes accordingly.

Thanks!

@mazamizo21 mazamizo21 requested a review from a team as a code owner February 25, 2026 12:31
@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — done! Removed the 1.0.0 zip and updated the release notes to reflect 3.0.0 as the initial release. Thanks!

@v-maheshbh
Copy link
Contributor

Hi @v-maheshbh — done! Removed the 1.0.0 zip and updated the release notes to reflect 3.0.0 as the initial release. Thanks!

image

Thanks!

- Initial release of Cyren → CrowdStrike Falcon IOC automation connector
- Logic App: polls Cyren CCF feed (NDJSON), pushes IOCs to CrowdStrike /iocs/entities/indicators/v1
- OAuth2 Bearer token auth with CrowdStrike API
- User-Agent: data443-cyren-crowdstrike/1.0 on OAuth2 token + IOC POST calls
- 6-hour recurrence, PersistentToken pagination, cost safety parameters
- Hidden Sentinel tags for Content Hub visibility
- Zip contains only mainTemplate.json + createUiDefinition.json (cert rule 300.4.1.1)
@v-maheshbh
Copy link
Contributor

Hi @mazamizo21

The playbook is not visible in Content Hub. Please review and update the metadata section to ensure the playbook is correctly defined and referenced in the solution metadata and main template.

image

Thanks!

- playbookContentId1: 'Playbooks' -> 'CyrenToCrowdStrike'
- Removed spurious Playbooks/_Playbooks variables
- displayName: 'Playbooks' -> 'CyrenToCrowdStrike'
- Added missing hidden-SentinelTemplateName tag ('CyrenToCrowdStrike')
- Added missing hidden-SentinelTemplateVersion tag ('1.0')
- parentId in inner metadata: single bracket -> double bracket (ARM escape)
- Rebuilt 3.0.0.zip with fixed mainTemplate.json
@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — fixed in the latest commit!

Root cause: The V3 packaging tool generated a generic playbookContentId1: "Playbooks" and omitted hidden-SentinelTemplateName/hidden-SentinelTemplateVersion tags entirely. Content Hub could not find the playbook.

Changes made to mainTemplate.json:

  1. playbookContentId1: "Playbooks""CyrenToCrowdStrike"
  2. Removed spurious Playbooks/_Playbooks variables
  3. displayName: "Playbooks""CyrenToCrowdStrike"
  4. Added missing hidden-SentinelTemplateName: "CyrenToCrowdStrike" tag to Logic App resource
  5. Added missing hidden-SentinelTemplateVersion: "1.0" tag to Logic App resource
  6. Inner metadata parentId: single bracket [variables(...)] → double bracket [[variables(...)]] (required ARM escape in nested template context)
  7. Rebuilt 3.0.0.zip

Please re-verify Content Hub visibility. Thanks!

mazamizo21 pushed a commit to Data443/Azure-Sentinel that referenced this pull request Mar 16, 2026
…Hub visibility (Azure#13658)

Root cause: playbookContentId1 was "Playbooks" (generic V3 output) causing contentId
mismatch. hidden-SentinelTemplateName/TemplateVersion tags were missing entirely.

Changes:
- playbookContentId1: "Playbooks" → "CyrenToCrowdStrike"
- Added hidden-SentinelTemplateName: "CyrenToCrowdStrike" to Logic App tags
- Added hidden-SentinelTemplateVersion: "1.0" to Logic App tags
- description: "Playbooks Playbook..." → "CyrenToCrowdStrike Playbook..."
- displayName: "Playbooks" → "CyrenToCrowdStrike"
- contentId ref: _Playbooks → _playbookContentId1 (removed dangling variable ref)
- Removed spurious Playbooks/_Playbooks variables
- Rebuilt 3.0.0.zip
@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — fixed in the latest commit (c36e81d)!

Root cause identified: The V3 packaging tool set `playbookContentId1` to the generic string `"Playbooks"` and omitted `hidden-SentinelTemplateName`/`hidden-SentinelTemplateVersion` tags entirely. Content Hub could not find the playbook.

Changes made to `mainTemplate.json`:

  1. `playbookContentId1`: `"Playbooks"` → `"CyrenToCrowdStrike"`
  2. Added `hidden-SentinelTemplateName: "CyrenToCrowdStrike"` to Logic App tags
  3. Added `hidden-SentinelTemplateVersion: "1.0"` to Logic App tags
  4. `description`: updated to reference correct playbook name
  5. `displayName`: `"Playbooks"` → `"CyrenToCrowdStrike"`
  6. Dependencies `contentId` ref: `_Playbooks` → `_playbookContentId1` (removed dangling variable)
  7. Removed spurious `Playbooks`/`_Playbooks` variables
  8. Rebuilt `3.0.0.zip`

Please re-verify Content Hub visibility. Thanks!

@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — fixed in this commit!

Root cause (deep analysis vs TacitRed working reference):
The V3 packaging tool left a stale _Playbooks variable reference in the contentPackages dependency criteria. The contentId field pointed to [variables('_Playbooks')] — a variable that does not exist in the template. Content Hub resolves this dependency to find the playbook, so a broken reference = playbook not visible.

Fix applied to mainTemplate.json:

  • dependencies.criteria[0].contentId: [variables('_Playbooks')][variables('_playbookContentId1')]
  • Rebuilt 3.0.0.zip with corrected mainTemplate.json

Verified against TacitRed-SentinelOne (working reference):

  • dependency contentId structure matches exactly
  • hidden-SentinelTemplateName / hidden-SentinelTemplateVersion / hidden-SentinelWorkspaceId tags all present
  • contentKind: Playbook confirmed
  • ZIP contains only mainTemplate.json + createUiDefinition.json

Please re-verify Content Hub visibility. Thanks!

…customers can now install without both tokens (Cyren-CrowdStrike (PR Azure#13658))
@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — additional fix in the latest commit!

Change: Optional JWT token + Azure Marketplace trial link

Problem: Cyren feeds are sold as two separate SaaS offers on Azure Marketplace (IP Reputation and Malware URL). Customers who only purchase one feed were unable to install the connector because the JWT token field had an implicit required constraint — the Logic App would fail to deploy with an empty token.

Fix applied:

  1. Cyren_JwtToken parameter: added minLength: 0 (token is now optional)
  2. Logic App resource: added condition: [[not(empty(parameters('Cyren_JwtToken')))] — connector only deploys when a token is provided
  3. createUiDefinition.json: added Azure Marketplace trial link so customers can request a token directly from the connector UI
  4. Updated parameter descriptions to clarify the token is optional and which feed it corresponds to
  5. Version bumped accordingly

Marketplace link added to UI:
https://marketplace.microsoft.com/en-us/search/products?search=data443&page=1

All 17/17 Content Hub visibility checks still passing. Thanks!

@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — found and fixed the root cause of the playbook not appearing in Content Hub.

Root cause (deeper issue):
The inner mainTemplate (nested template deployed by Content Hub) contained a stray workspace parameter that conflicted with the outer template parameter passthrough. This caused the inner metadata resource name to resolve incorrectly during Content Hub deployment, preventing the playbook template from registering.

Specifically compared against TacitRed-SentinelOne (live in Content Hub as working reference):

Field TacitRed (WORKS) Cyren (was broken) Fixed
Inner workspace param Not present Present (stray) Removed ✅
Inner workspace-name var [parameters('workspace')] Missing Added ✅
Inner workspaceResourceId [[resourceId(...variables('workspace-name')] [[resourceId(...parameters('workspace')] Fixed ✅

Changes in latest commit:

  1. Removed stray workspace parameter from inner mainTemplate.parameters
  2. Added workspace-name variable: [parameters('workspace')]
  3. Updated workspaceResourceId to use variables('workspace-name') — exactly matching TacitRed pattern

Please re-verify Content Hub visibility. Thanks!

@mazamizo21 mazamizo21 force-pushed the feature/cyren-cs-ioc-v3.0.1 branch from c36e81d to 521b906 Compare March 18, 2026 07:44
@v-maheshbh
Copy link
Contributor

v-maheshbh commented Mar 18, 2026

Hi @mazamizo21
image

kindly review above changes.

Thanks!

@mazamizo21
Copy link
Contributor Author

Hi @v-maheshbh — updated in the latest commit!

The metadata section is now reflected in both the standalone playbook file and the inner template within mainTemplate.json. The 3.0.0.zip has been repackaged accordingly.

Please re-verify and let us know if any further changes are needed. Thanks!

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

Labels

New Solution For new Solutions which are new to Microsoft Sentinel

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants