Professional services · Internal knowledge copilot

Proving an internal copilot respects the permissions its documents already had.

CASE STUDY / 02

A professional-services firm with offices in several countries was rolling a knowledge copilot out to more than ten thousand staff. It drew on document stores, email and the HR system. Leadership wanted one thing settled before the firm-wide launch: that it would never show someone a document they could not already open.

By Vigilantia TeamPublished

Sector

Professional services

System

Retrieval-backed internal copilot across document, email and HR sources

Engagement

AI Security Assessment

Timeline

Five-week engagement; continuous assurance since

The situation

Ten thousand people, one assistant, every document.

The pilot had gone well. Partners liked it, the analysts who built it were proud of it, and the connectors to the firm's document platform, mailboxes and HR records were in place. The sources were sensitive by nature: client matters, deal rooms, performance reviews, compensation.

The firm's own review had focused on the model and the prompts. The question nobody had answered end to end was simpler and harder: when the copilot retrieves, does it retrieve as the user, or as itself? We were asked to answer it with evidence, across every connector.

What we found

It retrieved as itself, not as the user.

F/01

Two connectors retrieved with a service identity

The document and HR connectors indexed content using a privileged account. The copilot then filtered results by the user's permissions - after retrieval, in application code. Three gaps in that filter returned excerpts of files the user could not open directly.

F/02

Summaries leaked what the full document would not

Even where a document was correctly withheld, the copilot had already summarised it into its working context. Asking about the topic rather than the file produced the substance.

F/03

Shared mailboxes blurred the boundary

Mailbox access was scoped per user, but a shared team mailbox was indexed for everyone with any membership, past or present.

F/04

Compensation data was one question away

HR records were in scope for managers. The copilot could be led to aggregate across reports a manager should not have been able to see together.

What changed

Permissions enforced before the model sees a word.

The fix was structural rather than cosmetic: retrieval now happens as the user, on every source, and the firm-wide launch went ahead on the planned date with the findings closed and evidenced.

  • Retrieval moved to the user's own identity on every connector - no privileged indexing, no post-hoc filtering
  • Permission checks enforced before content enters the model's context, not after
  • Shared mailboxes scoped to current membership and re-evaluated on every query
  • HR records removed from the general copilot; a separately governed HR assistant scoped afterwards
  • An access-control test set, mapped to real permission scenarios, for the firm to run on every change

Ongoing assurance

New sources are tested before staff see them.

Connectors are where this system changes most. Each new source, platform upgrade or permission-model change runs through the access-control suite before it goes live. We added the firm's new matter-management platform to the suite this year and found a filter regression in a connector update before it reached staff.

The firm's security team owns the suite day to day. We review coverage with them twice a year and test new sources on request.

How continuous assurance works

Begin with evidence

Know what your AI system can do before an attacker does.

Start an assessment