Versioned security assessment

Report ID: SA-EBDFE608

7/23/2026, 8:03:19 PM

entra-app-registration security assessment v6

Skill Security Certification Report

Audit History
Scanner version 3.0.0 Audit model: codex Latest published report
Skill name
entra-app-registration
Version
v0.0.0-placeholder
Maintainer
microsoft
Coverage
18 Files scanned · 2,802 Lines analyzed
Policy version
skillstore-security-audit-policy-v1

Highest confirmed finding severity

High

9 confirmed security findings require attention.

Installation context

Check the current Skill page

This page summarizes report evidence only. The Skill page provides the canonical install advisory.

Open current Skill page

This report does not block or authorize the manifest or ZIP.

Most static alerts are lexical false positives caused by Markdown, Microsoft endpoints, OAuth scopes, and explicit Azure administration examples. Confirmed risks include unsafe placeholder redirects, credential-reset commands, and an unguarded cleanup loop. Semantic review also found a source-embedded secret pattern, broad default Graph permissions, and overbroad public-client guidance.

Report position

Latest published report

Latest refers to the report sequence, not to artifact currentness.

Audit attestation

Active attestation

A public attestation is available for this exact report.

Human verification

Not verified

No human verification is recorded for this report.

Coverage

18 Files scanned · 2,802 Lines analyzed

18 items shown for review

Limitations

This report does not claim runtime or sandbox execution and does not prove the absence of side effects.

Evidence chain

Follow the evidence from source binding to the install contract. Available evidence supports verification; it is not a safety guarantee.

  1. Source

    Commit and path bound

  2. Artifact

    Content and tree hashes bound

  3. Audit

    Complete

  4. Install contract

    Open manifest to verify

    Open manifest

Capabilities observed

Observed means this report recorded supporting evidence. Not recorded does not prove that a capability is absent.

Contains scripts

May execute code included with the Skill.

Not recorded by this audit

Network access

May connect to external services.

Observed in 50 evidence locations

Filesystem access

May read or write local files.

Observed in 18 evidence locations

Env variables

May read values from the process environment.

Observed in 7 evidence locations

External commands

May invoke commands or programs outside the Skill.

Observed in 30 evidence locations

Capability review items (9)
Medium
Hardcoded URL
'https://myapp.azurewebsites.net/signin-oidc'
This deployable template registers a non-reserved external hostname as a default web redirect URI. An unchanged deployment could direct authorization responses to a domain outside the user's control.
Medium
Hardcoded URL
'https://myapp.azurewebsites.net'
This deployable template registers a non-reserved external hostname as a default SPA redirect URI. An unchanged deployment could expose authorization responses to another domain.
Medium
Hardcoded URL
logoutUrl: 'https://myapp.azurewebsites.net/signout-oidc'
The executable template sets an unverified external logout URL by default. An unchanged deployment can redirect signed-out users to a domain outside their control.
Medium
Hardcoded URL
--web-redirect-uris "https://myapp.com/callback" \
This executable example registers myapp.com as an OAuth callback without requiring replacement. Copying it unchanged could authorize redirects to a domain the user does not control.
Medium
Hardcoded URL
--web-redirect-uris "https://myapp.com/callback" \
This multi-tenant example registers myapp.com as an OAuth callback without a replacement guard. The external placeholder can become an unauthorized redirect destination.
Medium
Hardcoded URL
--web-redirect-uris "https://myapp.com/callback" "https://myapp.com/auth"
This update command adds external myapp.com callback URLs to an existing registration. Running the example unchanged creates redirect destinations outside the user's verified domains.
Medium
Hardcoded URL
--public-client-redirect-uris "http://localhost" "myapp://auth"
The command registers a generic custom URI scheme that another local application could claim. Native clients should use protected app links or carefully validated loopback redirects.
Medium
Hardcoded URL
--web-redirect-uris "http://localhost:3000" "https://myapp.com/callback"
This remediation command registers myapp.com as a live callback without a replacement check. Copying it unchanged can introduce an unauthorized redirect destination.
Low
Hardcoded URL
homePageUrl: 'https://myapp.azurewebsites.net'
The executable template assigns an unverified external hostname as application metadata by default. Users may publish a link they do not control if they deploy it unchanged.

Risk findings

Confirmed security concerns are separated from items that still need review.

Confirmed security concerns (9)

RISK-001 High
Client Secret Embedded in Source Example
The Node.js example places the client secret directly in source configuration. Users who replace the placeholder may commit a live credential to version control.
The clientSecret field is explicitly populated from an app-registration placeholder inside source code. The surrounding example provides no secure retrieval pattern.
RISK-002 High
Overprivileged Default API Permissions
The deployable Bicep example requests Mail.Read and application-level User.Read.All by default. An approved deployment can expose mailbox and directory data beyond basic sign-in needs.
The permission IDs and comments directly configure delegated mail access and tenant-wide application user access. These permissions are unrelated to a minimal registration baseline.
RISK-003 Medium
System reconnaissance
az ad app credential reset --id $APP_ID
The command resets credentials without --append, and the guide states that this deletes existing credentials. Running it can immediately break every client using those credentials.
RISK-004 Medium
System reconnaissance
az ad app credential reset --id $APP_ID --years 1
The one-year secret command resets credentials without --append. It can invalidate all existing application credentials and cause an authentication outage.
RISK-005 Medium
System reconnaissance
az ad app credential reset --id $APP_ID --end-date "2025-12-31"
The dated secret command resets credentials without --append. It can invalidate existing clients before they migrate to the new credential.
RISK-006 Medium
System reconnaissance
az ad app credential reset --id $APP_ID --cert "@path/to/cert.pem"
The certificate upload uses credential reset without --append. It can remove existing passwords and certificates, causing service disruption.
RISK-007 Medium
System reconnaissance
az ad app delete --id $APP_ID
This line deletes every application returned by a pattern-based cleanup loop without confirmation. A broad match can remove valid identity applications and interrupt authentication.
RISK-008 Medium
System reconnaissance
az ad app credential reset --id $APP_ID --years 1
The troubleshooting fix resets all application credentials without warning or --append. Applying it can invalidate active clients while resolving one expired secret.
RISK-009 Medium
Overbroad Public Client Flow Enablement
The beginner guide tells every console app to enable public client flows, including resource owner password flow. This expands the authentication surface without confirming the required flow.
The text explicitly identifies resource owner password flow and directs console-app users to enable the setting. It does not limit the advice to device-code requirements.

Remediation

Suggested fixes recorded by this audit. Applying them is the maintainer’s responsibility.

  1. FIX-001
    High
    The Node.js example places a client secret in source code.
    Load secrets from managed identity, Key Vault, or a protected runtime secret provider. Show no source-level secret assignment.
  2. FIX-002
    High
    The Bicep template requests broad Graph permissions by default.
    Default to User.Read only. Parameterize additional permissions and require documented approval before adding application roles.
  3. FIX-003
    Medium
    Examples register non-reserved placeholder redirect and logout domains.
    Require redirect parameters without external defaults. Validate ownership and HTTPS before creating or updating an app registration.
  4. FIX-004
    Medium
    Credential creation examples reset and remove existing credentials.
    Use --append for staged rotation. Verify the new credential before removing the old credential by key ID.
  5. FIX-005
    Medium
    The cleanup loop deletes every application returned by a broad name match.
    Add a dry run, exact allowlist, per-application confirmation, and tenant verification before deletion.
  6. FIX-006
    Medium
    The beginner guide enables public client flows for every console application.
    Enable only the required flow. Do not enable resource owner password flow, and prefer authorization code with PKCE or device code.

Expert evidence

Immutable subject identity, scanner metadata, dismissed matches, and source-level evidence.

Artifact subject

Marketplace commit
ebdfe608f5de2b66ff37ab4af12af8ac4f5e8006
Content hash
b1a6862b90b18d9f6137b1cd186c005f8632b22b4c31492c6abf6f752a8f4605
Tree hash
21494f4bfe98d5cc709a3470a99f192fe1cd0da9650dd402a7a23ea0b255b769
Skill path
skills/microsoft/entra-app-registration
Audit payload hash
1478173df78629a204efe8b13ab0e9c0

Analysis metadata

Audit model: codex

Analysis state: Complete

Scope is limited to the recorded files, lines, methods, and evidence. No runtime or sandbox execution is claimed.

Verify and export

The manifest and lockfile bind install artifacts to cryptographic hashes. This integrity claim is separate from the security assessment.

Audit attestation: active