Skip to content

[pull] dev from KelvinTegelaar:dev - #162

Open
pull[bot] wants to merge 6291 commits into
morrie-morrie:devfrom
KelvinTegelaar:dev
Open

[pull] dev from KelvinTegelaar:dev#162
pull[bot] wants to merge 6291 commits into
morrie-morrie:devfrom
KelvinTegelaar:dev

Conversation

@pull

@pull pull Bot commented Jul 11, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Zacgoose and others added 30 commits July 2, 2026 15:19
# Conflicts:
#	Modules/CIPPActivityTriggers/Public/Entrypoints/Activity Triggers/BEC/Push-BECRun.ps1
Added extra properties
Improved efficiency of adding exception items

Signed-off-by: DamienMatthys <damien@pcunplug.com>
Added extra properties
Improved efficiency of adding exception items

Signed-off-by: DamienMatthys <damien@pcunplug.com>
Enabled syncing with no CVEs in case they have all been cleaned up

Signed-off-by: DamienMatthys <damien@pcunplug.com>
## Problem

The BEC investigation only lists inbox rules that **still exist** on the
mailbox (`Get-InboxRule`). Attackers commonly create a rule, use it, and
then delete it to cover their tracks — those rules were completely
invisible in the report.

Separately, when the unified audit log search failed or timed out, the
exception killed the **entire** BEC run instead of producing a partial
report.

## Changes

- **New `InboxRuleChanges` field**: a user-scoped
`Search-UnifiedAuditLog` for `New-InboxRule`, `Set-InboxRule`,
`Remove-InboxRule` and `UpdateInboxRules` events over the last 7 days,
so created/changed/deleted rules show up even if they no longer exist.
- **`RecentlyChanged` flag on existing rules**: rules returned by
`Get-InboxRule` are flagged when their name matches a 7-day audit event.
(Inbox rules carry no timestamps, so name-matching is the best available
signal; Outlook-client `UpdateInboxRules` events carry no rule name and
stay unflagged.)
- **Resilience**: the tenant-wide audit search is wrapped in try/catch —
on failure it logs a warning and degrades to partial results instead of
failing the whole run. `Get-InboxRule` failures now log via
`Write-LogMessage` (the old `Write-Host` string concat was broken).
- **Trimmed the tenant-wide search**: dropped
`MailboxLogin`/`UserLoggedIn` operations — nothing downstream consumed
them (`$PermissionsLog` filters to permission ops only) and sign-in
events are high-volume, bloating the search.
- Error-path result now includes `ExtractedAt` so the frontend gets a
timestamp even on failure.

## Companion PR

Frontend PR (displays `InboxRuleChanges` + `RecentlyChanged` in the BEC
page and PDF report): KelvinTegelaar/CIPP#6281

This PR is safe to merge on its own — it only adds fields to the BEC
result.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
…moval on offboarding (#2129)

- Fixes KelvinTegelaar/CIPP#6280
- Remove users from mail-enabled security groups during license removal
on offboarding
Minimising tasks

Signed-off-by: DamienMatthys <damien@pcunplug.com>
Minimising tasks

Signed-off-by: DamienMatthys <damien@pcunplug.com>
- Ability to add secrets
- Ability to edit URI's
- Ability to edit audience
- Added 'rotate' secret workflow (delete and recreate with the same name)
github-actions Bot added 30 commits July 27, 2026 06:38
Add a reusable policy diff table and a new compare dialog used from Drift and Applied Standards to compare Intune template standards against live tenant policy state. Extend ExecCompareIntunePolicy with template-prepared resolution, tenantPolicyByTemplate lookup, fuzzy-name matching aligned to standard settings, and explicit missing-policy responses. Also extract Intune template type inference into a shared CIPPCore helper and reuse it in the IntuneTemplate standard.

Synced from CyberDrain/CIPP@2c9020b
Add a shared Get-CIPPOfficeAppBody helper and use it in both manual and template/queued Office app deployments so all paths build the same Graph payload and strip unsupported properties consistently. Also detect existing Office apps by @odata.type (officeSuiteApp) instead of display name to avoid repeated redeploys, and trim/validate assignment group names with clearer error output when no groups resolve.

Synced from CyberDrain/CIPP@f72e7bf
Improve SharePoint admin link handling across backend and frontend. The API now requires `TenantFilter`, resolves and persists a valid admin URL, logs and returns clearer errors when resolution fails, and includes the URL in redirect responses. Tenant listing and portal UI now prefer the cached `SharepointAdminUrl` field (with fallback to the resolver endpoint), so portal links behave like other direct admin links after first resolution.

Synced from CyberDrain/CIPP@81a896f
Mark ListFeatureFlags and several settings endpoints (BackupRetentionConfig, DnsConfig, JITAdminSettings, LogRetentionConfig, PasswordConfig) as AnyTenant so they can be called without a tenant context.

Synced from CyberDrain/CIPP@113df59
Add `Initialize-CippRequestContext` and call it at the start of `New-CippCoreRequest` so AsyncLocal-backed tenant/group scope and role cache are always reset on reused workers. Also ensure unrestricted paths explicitly clear scope slots instead of leaving stale restricted values behind.

Add `Get-CippRequestContext` for safe cross-module diagnostics, then update `Invoke-ListApiTest` to read context through CIPPCore rather than CIPPHTTP module scope. Update access-role in-memory caching to include a 15-minute TTL aligned with table cache expiration so role changes are picked up without waiting for process recycle.

Synced from CyberDrain/CIPP@f1caebb
Introduces a per-worker cache for access scope rules derived from custom roles and tenant group membership, keyed on a shared version stamp stored in Azure Table.

- Add Get-CippAccessScopeRule to cache the rule (allow/block lists) rather than resolved tenant ids, keeping correctness as tenants change
- Add Get-CippAccessScopeVersion to memo the shared stamp with a short TTL
- Add Clear-CippAccessScopeCache to bump the stamp and drop local memos; called from ExecCustomRole, ExecTenantGroup, Set-CIPPAccessRole, and Update-CIPPDynamicTenantGroups
- Add Expand-CippScopeTenantItem to resolve tenant group references in allowed/blocked lists
- Refactor Test-CIPPAccess to use the cache for TenantList and GroupList requests, avoiding a full tenant load on every warm request
- Extract Resolve-CippRoleTenantEntry and fix silent drop of unresolvable tenant ids in ListCustomRole, which previously caused a blocked tenant to render as unrestricted

Synced from CyberDrain/CIPP@aa01643
…ine number and detailed JSON output for better diagnostics. (fallback in case write-logmessage doesn't capture it)

Synced from CyberDrain/CIPP@224f2de
Replace wildcard match for '*/organization' with a regex pattern '/organization(\?|$)' to avoid false positives from URLs containing '/organization' as a path prefix (e.g., '/organizationSettings').

Synced from CyberDrain/CIPP@523be86
Exclude the Tests directory from PSScriptAnalyzer runs and add targeted SuppressMessageAttribute annotations for intentional use of ConvertTo-SecureString with plain text (values written to Azure Key Vault) and username/password params (outbound webhook config).

Synced from CyberDrain/CIPP@1001169
Make the reusable settings template test stubs match the real advanced-function signatures so parameter binding drift fails loudly. Update the compare-field mock to capture CurrentValue/ExpectedValue and adjust assertions to validate compliance via those fields instead of the legacy FieldValue.

Synced from CyberDrain/CIPP@b4af4f6
Feat: Re-add tools and update M365 licenses static files

Synced from CyberDrain/CIPP@ad48dd5
…bac-scope

fix(tenant access check): add RoleManagement.Read.Exchange delegated permission

Synced from CyberDrain/CIPP@cbfae34
Comment out two `Write-Information` messages in `Test-CIPPAuditLogRules` during GUID mapping. This keeps webhook processing output quieter without changing mapping behavior.

Synced from CyberDrain/CIPP@0ebfb24
Add a shared `Get-CIPPHostname` helper to consistently resolve and optionally persist the active CIPP host across HTTP and background contexts. Update Partner Center subscription creation/update logic to compare against the current desired webhook URL, handle missing host resolution, and sync stored webhook metadata when needed. Also surface `expectedWebhookUrl` in the webhook API response and show a frontend warning when an existing subscription still points to an old URL.

Synced from CyberDrain/CIPP@b6f0c08
fix(webhooks): harden audit log v2 processing

Synced from CyberDrain/CIPP@43802e0
- Add URI/ResourceUrl host validation to New-CIPPAzRestRequest to prevent Managed Identity tokens from being sent to arbitrary hosts
- Expand scheduler blocked commands list with additional API, token, secret, RBAC, storage, and infrastructure functions to close privilege escalation and exfiltration vectors
- Fix test file path for Get-CIPPSchedulerBlockedCommands.ps1 (Private → Public/Tools)

Synced from CyberDrain/CIPP@0fb7134
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants