PathixDataverse Forensics
The findings library

What Pathix checks for.

72 deterministic finding types, 33 of them carrying a SOC 2, ISO 27001:2022, NIST 800-53, or CMMC and NIST 800-171 reference. The rest are environment-health findings and carry none. Every one is read from your own customization graph, plugins, roles, flows, Power Pages configuration and column security, and scored per instance in your environment.

72
FINDING TYPES
33
CARRY A FRAMEWORK REFERENCE
SOC 2 · ISO · NIST · CMMC
FRAMEWORKS
Book a walkthroughHow findings work
In the console

Every check on this page lands in one ranked list.

Open findings across the environment, faceted by severity and category, each with a delta since the scan before. Findings on Microsoft-shipped and system-authored components are flagged as noise and hidden by default, so what you work is what your team actually owns.

Pathix security findings console: open findings faceted by severity and category, a privileged shared role, a disabled user retaining its roles, and a field secured with no profile grants, each with a since-last-scan delta.

See how findings work, from console to fix →

72 of 72 finding types
Framework
Severity
Surface
Security findings

44 security findings, 33 of them mapped.

Conditions Pathix detects deterministically. Most map to SOC 2, ISO 27001:2022, NIST 800-53, or CMMC; a few carry no control claim. Mappings are indicative: Pathix detects a condition relevant to a control, it does not certify, satisfy, or assess compliance on your behalf, and a finding, or its absence, is not an assessment outcome.

32 of them also carry a CMMC practice mapping. In total Pathix produces evidence for 4 of the 15 Level 1 practices and 15 of the 110 Level 2 practices, all carrying through Level 3. It is not a CMMC compliance platform and does not assess the rest of your environment; the Level 3 additions from NIST 800-172 are outside its scope. The full CMMC crosswalk →

Access & least privilege8

Who really holds what, and where a change or a stolen credential quietly widens access, including the self-elevation paths.

HighSecurity role assigned to both human users and integrationsOne role held by both people and service accounts means every privilege you add hits both audiences at once, and a stolen integration key inherits full human access.SOC 2 CC6.3ISO 27001 A.5.15 / A.5.18NIST AC-5 / AC-6CMMC AC.L1-3.1.1CMMC AC.L2-3.1.4CriticalIntegration account holds a Microsoft system roleA service account with System Administrator or System Customizer bypasses nearly every access check. A compromised key can read everything, rewrite security, and cover its tracks. Pentesters find this in the first fifteen minutes.SOC 2 CC6.1 / CC6.3ISO 27001 A.8.2NIST AC-6 / AC-6(5)CMMC AC.L2-3.1.5CriticalIntegration can rewrite the security modelA service account whose role can create roles, assign roles, or provision users can bootstrap itself to full control through the API alone. No production integration needs this.SOC 2 CC6.3ISO 27001 A.8.2NIST AC-6(1) / AC-3CMMC AC.L2-3.1.5HighHuman user holds a role that can rewrite the security modelA non-admin whose custom role grants role or user administration can grant themselves anything through the API: a low-privilege login that can bootstrap itself to full control.SOC 2 CC6.3ISO 27001 A.8.2NIST AC-6(1) / AC-6(10)CMMC AC.L2-3.1.5CMMC AC.L2-3.1.7HighTeam mixes human members and integrations while holding rolesA role-holding team with both people and service accounts as members grants every privilege to both, the same shared-role risk arriving through team membership, where the direct check cannot see it.SOC 2 CC6.3ISO 27001 A.5.15 / A.5.18NIST AC-5 / AC-6CMMC AC.L2-3.1.4HighBusiness unit default team holds a security roleEvery user in a business unit is an unremovable member of its default team, so a role there grants to the whole unit and widens automatically as people are added. Easy to do by accident.SOC 2 CC6.1ISO 27001 A.5.15 / A.8.2NIST AC-6 / AC-2CMMC AC.L1-3.1.1HighCustom role grants act on behalf of another userThe delegation privilege lets a principal act as another user, attributing their actions to someone else and operating with that user's access. Legitimate for some integrations, worth confirming for the rest.SOC 2 CC6.1 / CC6.3ISO 27001 A.8.2NIST AC-6 / AU-10CMMC AC.L2-3.1.7CMMC AU.L2-3.3.2MediumNo operational role grants the required privilegeA plugin step runs on a CRUD message against a table whose privilege no operational role grants, so least-privilege users hit access errors and the step does not execute. A functional-coverage gap, not over-privilege.Plugin steps
Identity lifecycle & offboarding7

The canonical "termination did not fully revoke" family: every residual path a disabled account leaves behind.

HighDisabled user account still has security role assignmentsDisabling a user suspends login but keeps their roles. Re-enable the account, on purpose or through a directory sync, and every role snaps back with no further action.SOC 2 CC6.2ISO 27001 A.5.18NIST AC-2 / PS-4CMMC PS.L2-3.9.2HighDisabled user account still holds manually shared recordsDisabling a user revokes neither roles nor record shares, and shares have no surface in the user UI, so they survive careful offboarding. Re-enable the account and the shared records are reachable again.SOC 2 CC6.2ISO 27001 A.5.18NIST AC-2 / AC-21 / PS-4CMMC PS.L2-3.9.2
HighEnabled automation or AI is owned by a disabled user accountA live flow or workflow owned by a disabled account authenticates and runs under that owner, so it stalls or refuses reactivation, and the process it drove silently stops.Classic workflowsCloud flowsAgent flowsCopilot Studio agentsAI Builder modelsSOC 2 CC6.2ISO 27001 A.5.18NIST AC-2 / PS-4CMMC PS.L2-3.9.2
HighPlugin step impersonates a disabled user accountA step set to always run as a disabled user fails every time it fires, because Dataverse cannot build a run-as context for a disabled principal.Plugin stepsSOC 2 CC6.2ISO 27001 A.5.18NIST AC-2 / PS-4CMMC PS.L2-3.9.2MediumPlugin step always runs as one fixed user accountEvery change the step makes is attributed to one account regardless of who triggered it, obscuring who really acted, and it breaks the day that account leaves.Plugin stepsSOC 2 CC6.1ISO 27001 A.8.15NIST AU-2 / AU-10CMMC AU.L2-3.3.2
External connections & transmission security10

How the environment reaches outside itself, and whether those connections are declared, authenticated, and encrypted. The code-level inventories are floors: only destinations written as literals are detectable, so a URL built at run time or a call behind a wrapper library is not counted.

HighAutomation has a secret written into its configurationA credential sits in a plugin step's unsecure config, readable by anyone who can read the registration and carried into solution exports and source control. Pathix reports the pattern and a redacted length, never the value.Plugin stepsCloud flowsAgent flowsSOC 2 CC6.1ISO 27001 A.5.17 / A.8.24NIST IA-5 / SC-28CMMC IA.L2-3.5.10
HighTraffic leaves the environment over plaintext HTTPA service endpoint or webhook uses http, so record data, execution context, and any credential in the message cross the network unencrypted.Service endpointsWebhooksPlugin stepsCustom connectorsDataflowsForm scriptsHTML web resourcesSOC 2 CC6.7ISO 27001 A.8.24 / A.5.14NIST SC-8 / SC-13CMMC SC.L2-3.13.8
MediumWebhook sends outbound calls with no authenticationA webhook with no key or header cannot prove its calls are genuine, so anyone who learns the URL can post traffic that looks authentic.WebhooksSOC 2 CC6.1ISO 27001 A.8.3 / A.5.14NIST IA-9 / SC-8CMMC SC.L2-3.13.8HighHTTP-triggered flow can be run by anyone with the URLThe flow's trigger accepts anyone with the URL, no identity check, so a leaked link lets anyone drive whatever the flow does in Dataverse. Power Automate now defaults new flows to tenant-restricted.Cloud flowsAgent flowsSOC 2 CC6.1ISO 27001 A.8.3NIST AC-3 / IA-2CMMC AC.L1-3.1.1HighPlugin code calls an external endpoint registered nowhereA plugin's compiled code calls an external endpoint directly, so the destination appears in no admin surface: not the Plugin Registration Tool, not a solution export, not an outbound connection inventory.Plugin steps
Public exposure & Power Pages security12

What a Power Pages site's configuration grants to visitors, including ones who have not signed in. Pathix reads five of the six layers that decide site reach: web roles, table permissions, column permissions, page rules, and site settings. Whether the site itself is public or sits behind a sign-in wall is not readable by scan, so every finding here states what the configuration grants rather than confirming anything is public.

CriticalPower Pages site is configured to serve a secured column to anonymous visitorsA table permission grants anonymous Read, the Web API is enabled for the table, and the configured column list includes a column somebody deliberately secured. Together they configure the site to serve it to visitors who have not signed in.SOC 2 CC6.1ISO 27001 A.8.3NIST AC-3 / AC-6 / AC-22CMMC AC.L1-3.1.22CMMC AC.L2-3.1.5CriticalAnonymous site visitors can change data in this tableA table permission grants Write, Create, or Delete to the site's anonymous users role, so visitors who have not signed in can change stored data.SOC 2 CC6.1ISO 27001 A.8.3NIST AC-3 / AC-22CMMC AC.L1-3.1.22CMMC AC.L1-3.1.2HighAnonymous site visitors can read this tableA table permission grants Read to the site's anonymous users role. It governs the site's Web API, not only what a page renders, so at Global scope a visitor who never sees a list page can still query every row.SOC 2 CC6.1ISO 27001 A.8.3NIST AC-3 / AC-22CMMC AC.L1-3.1.22HighPower Pages Web API serves every column of this tableThe Web API is enabled for this table with a wildcard column list, so every column, including any that are column-secured, is in the set the site will serve to the browser.SOC 2 CC6.1ISO 27001 A.8.3NIST AC-6 / AC-22CMMC AC.L1-3.1.22CMMC AC.L2-3.1.5MediumAnyone on the internet can register an account on this siteThe site accepts open registration, so anyone can create an account. Authenticated stops meaning vetted: every permission on the authenticated-users role is one self-service sign-up away from the open internet.SOC 2 CC6.2ISO 27001 A.5.16NIST AC-2CMMC AC.L1-3.1.1MediumSite still accepts local username and password loginsThe site still accepts local username and password logins, so it runs a credential store outside your identity provider's controls: password rules, lockout and two-factor posture are the site's, not your tenant's.HighPower Pages demo mode is on, so login codes render on screenDemo mode prints password reset and second-factor codes onto the page instead of sending them to the account's email or phone. Anyone who can start a reset for an account can read the code that reset was meant to deliver privately, so the second factor stops being a second factor.SOC 2 CC6.1ISO 27001 A.5.17NIST IA-5CMMC IA.L2-3.5.2MediumPage access rule restricts the page to anonymous visitorsA Restrict Read rule narrows a page to the audience its web roles describe, and one of the roles attached here is marked as an anonymous users role. The page reads as protected in the design studio and admits visitors who have not signed in.SOC 2 CC6.1ISO 27001 A.8.3NIST AC-3 / AC-22CMMC AC.L1-3.1.22MediumPage access rule has no web role, so it restricts nothingA Restrict Read rule narrows a page to the audience its attached roles describe, so a rule with no roles narrows nothing. The page stays as reachable as it was before anyone created the rule, while the design studio still shows an active restriction on it.MediumPage access rule is attached to one language version, not the pagePower Pages models a page as one root row plus a content row per language, and access rules are meant to attach to the root because that is where the inheritance walk starts. Attached to a single content row, the restriction holds for that one language and the page's other versions inherit nothing from it.HighServer logic on this site can be run by anonymous visitorsServer logic is JavaScript the site runs on the server, and this endpoint is granted to the web role flagged for anonymous users. Anyone who has not signed in can invoke it at /_api/serverlogics/<name>.Power Pages server logicSOC 2 CC6.1ISO 27001 A.8.3NIST AC-3 / AC-22CMMC AC.L1-3.1.22MediumServer logic takes the table it operates on from the callerThe endpoint reads the Dataverse table it operates on out of the request instead of naming it in code, so it is not the narrow thing its name suggests. Whoever calls it chooses which table it touches.Power Pages server logicSOC 2 CC6.3ISO 27001 A.8.2NIST AC-6CMMC AC.L2-3.1.5
Operational findings · environment health

28 findings that keep the environment healthy.

Broken, orphaned, looping or wasteful automation, and surfaces built on retired platform pieces. Often the reason a migration bid goes sideways. They are not compliance-control findings and carry no mapping.

Integration & automation reliability25

Broken, orphaned, looping, or wasteful automation. Real environment-health value, but not evidence for a security control, and we label it that way on purpose.

HighAutomation writes a column its own trigger filters onThe step re-queues itself on every save, doubling side effects and burning depth budget. Only the platform's depth guard keeps it from an infinite loop.Plugin stepsCloud flowsAgent flowsReliability
MediumTied plugin steps write the same column in undefined orderTwo steps on the same table, message, and stage share an execution order and write overlapping columns, so the final value is nondeterministic and can flip after a redeploy or import.Plugin stepsCorrectnessMediumFlows on one trigger write the same column in undefined orderTwo or more enabled flows react to the same change to the same table and write the same column. Flows run independently, so nothing defines which finishes last and the final value is whichever run wrote it last. That can look stable for months and flip when a connector throttles or a run is retried.Cloud flowsAgent flowsCorrectnessMediumFlow calls a child flow that is turned offAn enabled flow declares a Run a Child Flow call to a flow that is turned off. A child flow that is off does not start when called, so on any run reaching the call the parent gets nothing back and the work the child was written to do does not happen. The platform gives no warning when a child is switched off while parents still point at it.Cloud flowsAgent flowsReliabilityMediumSame plugin type registered twice on one message and stageThe same plugin runs twice on every matching operation, doubling side effects and outbound calls for no benefit. A classic re-import artifact.Plugin stepsCorrectness
Medium / LowAutomation fires on every column changeNo filtering attributes means the step runs on every update of every column, which autosave multiplies, spending compute and feeding re-trigger loops. Microsoft's guidance calls for filters on every Update step.Plugin stepsCloud flowsAgent flowsPerformance
High / MediumPlugin step registered on Retrieve or RetrieveMultipleThese are the hottest messages on the platform, so every list view, lookup, and API read pays the step's cost. Worst when it makes an outbound call on every read.Plugin stepsPerformanceHighSynchronous plugin step calls an outbound endpoint in the save transactionA synchronous step routes to a webhook inside the user's save, so a slow or unreachable endpoint delays or fails every affected save. The same integration run asynchronously carries none of this risk.Plugin stepsAvailabilityHigh / MediumConnection reference has flows but no underlying connectionFlows cannot run through an unbound reference, so enabled ones fail at run time and disabled ones fail to activate. Common after an import skipped the connection wiring.Connection referencesAvailabilityHighCloud flow has been suspended by the platformThe platform stopped the flow, usually a data-loss-prevention policy violation, so its business process silently stopped while the flow still appears configured. The DLP cause is a real governance signal.Cloud flowsAgent flowsAvailabilityLowAsynchronous plugin step never purges completed jobsSuccessful async runs pile up in the system-job table without bound, slowing the async queue and consuming storage.Plugin stepsCapacity
MediumAutomation points at a table Pathix could not resolveA step is registered against a table Pathix could not resolve in the scan, so its writes and reads do not appear in dependency results. Often a deleted table with a stale registration.Plugin stepsCloud flowsAgent flowsHygiene
LowConnection reference with no flow bindingA connection reference exists but no flow binds to it. Not an active risk alone; the privileges of the underlying connection are the concern if it is ever re-bound.Connection referencesHygieneLowService endpoint or webhook with no plugin step bindingAn endpoint is registered but nothing triggers it. Not an active risk alone, but an over-permissioned or long-unused endpoint is worth cleaning up.Service endpointsWebhooksHygieneMediumPathix could not fully parse this componentA component works in Dataverse but the parser could not extract its full structure, so its writes and reads are incomplete in results. We treat these as parser bugs, not environment problems, and surface them rather than hide the gap.CoverageMediumPower Pages table permission has a parent chain that cannot be resolvedA permission uses Parent scope but the chain cannot be followed to a root, so its real reach is undetermined: anywhere between nothing and every row.CoverageLowPower Pages table permission is attached to another site's web roleA table permission is linked to a web role from a different site. Power Pages evaluates permissions within one site, so the link grants nothing while the design studio shows it as active.HygieneMediumAdvanced form step points at a form that does not existA step names a form on a table and no form on that table carries that name in this environment. The step has nothing to render, so visitors who reach it get an error instead of the form and every step after it is unreachable.Power Pages advanced formsMediumSite publishing states do not name exactly one defaultPublishing states decide whether a page is visible to visitors, and the default is the state new pages start in. With none flagged, new content lands in an undetermined state and authors find pages that will not appear; with several, content can go live before its author intended.InfoPage names a list or form that no template ever placesA web page names a list, basic form or advanced form in its own lookup column, and nothing in the chain of templates that renders the page actually places one. Visitors get a page without it while anyone reading the configuration sees a page that has it.Power Pages web pagesInfoServer logic endpoint has no web role, so nothing can invoke itWeb roles are the only way to reach a server logic endpoint, and this one has none granted. Nothing can call it: not an anonymous visitor, not a signed-in user, not a Liquid template.Power Pages server logicHygieneMediumCopilot Studio agent is reported as missing a licenseThe platform's own provisioning status says the agent is missing a license, which usually means the capacity or assignment it was created under has lapsed, moved, or was never completed. It stays in the environment and in your solutions while quietly not being something the tenant is paying to run.Copilot Studio agentsReliability

See which of these are in your environment.

Every scan runs these checks against your real Dynamics customization graph, ranked by severity, each with the principals it exposes and the control it answers to.

Read the sample reportBook a demo
© 2026 Pathix L.L.C. · self-hosted · metadata-only
Not affiliated with Microsoft. Dynamics 365, Dataverse, and Power Platform are trademarks of Microsoft Corporation.π