Gå til hovedinnhold

Sikkerhetskontroller

Denne siden er skrevet for sikkerhetsteam og revisorer som skal vurdere Revizo AI. Den beskriver hver kontroll i rekkefølgen den kjører, hvilke trusler den adresserer, og hva vi bevisst ikke påstår.


Kontrollkjeden​

Hver chat-forespørsel passerer disse kontrollene. En forespørsel som stoppes tidlig når aldri modellen.

#KontrollImplementasjonTrussel som adresseres
1AutentiseringwithTenant leser Clerk-sesjon server-side. tenantId og userId kan ikke settes av klienten.Uautentisert bruk, tenant-spoofing via parametre
2RolleChat er et skriveendepunkt (POST). Rollen Leser (org:viewer) avvises.Lesebrukere som utfører handlinger
3AI-policyFail-closed: ukjent organisasjon eller manglende innstilling behandles som avslått. Sjekkes før noe sendes til leverandør.Behandling organisasjonen har valgt bort
4MånedskvoteAdministrator kan sette tak på tokens og antall chatter per måned.Kostnadsløp, misbruk
5Hastighetsgrense10 chat-forespørsler per minutt per bruker, i tillegg til global grense.Automatisert misbruk, uthenting i stor skala
6InputvalideringMeldinger, bilder (maks 4, typebegrenset, størrelsesbegrenset), samtale-ID, oppgave-ID og selskaps-ID valideres. Ugyldig selskaps-ID forkastes stille i stedet for å feile.Injeksjon via parametre, DoS med store nyttelaster
7KlassifiseringRegelbasert klassifisering. Åpenbart off-topic (kode, dikt, politikk, generelle fakta) avvises uten modellkall.Misbruk av modellen som generell tjeneste, kostnad
8KontekstHvert oppslag har tenant_id = sesjonens organisasjon. Klient- og selskapsnavn hentes bare når objektet tilhører organisasjonen; ellers utelates det. Oppgavekontekst bruker samme synlighetsregel som resten av appen.Kryss-tenant lekkasje via kontekst, opplisting av andres objekter
9VerktøyautorisasjonHver håndterer mottar orgId og userId fra sesjonen og filtrerer på dem. Modellens argumenter er forslag; håndtereren verifiserer eierskap (for eksempel validateClientTenant før Smart Match).Modellen manipuleres til å be om fremmede data
10KortvalideringKort med ugyldig form forkastes. Maks ett valgkort per svar. Kortets nyttelast fjernes fra det modellen får se.Halvferdige eller forfalskede handlinger, lekkasje via verktøyresultat
11SvarfilterBlokkerte mønstre (rådgivningsformuleringer, personnummer, bankkontonummer) erstattes. Pålagte forbehold legges til for frister, skatteregler og lovsitater. Lekket verktøysyntaks strippes.Utilsiktet rådgivning, PII i svar
12Lagring og revisjonssporSamtale, verktøy brukt og forbruk lagres i organisasjonens tenant. Skrivende verktøy logger til hendelsesloggen.Manglende sporbarhet

Trusselmodell​

Prompt injection​

Prompt injection er forsøk på å få modellen til å bryte instruksen — via brukerens egen tekst, via innhold i et skjermbilde, eller via data som kommer tilbake fra et verktøy (for eksempel en oppgavetittel skrevet av noen andre).

Vårt standpunkt er at instruksen til modellen ikke er en sikkerhetsgrense. Vi antar at modellen kan bli manipulert, og designer slik at det ikke gir angriperen noe:

Hvis modellen manipuleres til å …Hva som skjer
be om data fra en annen organisasjonVerktøyet filtrerer på sesjonens tenant_id. Tomt resultat.
be om en oppgave brukeren ikke kan seSynlighetsfilteret i verktøyet returnerer ingenting.
sende e-post til en fri adresseDokumentasjonsforespørsel krever kort og klikk. send_message_to_contact krever at mottaker finnes i organisasjonens kontaktregister.
lagre en rutinebeskrivelseKortet krever klikk. HTML saniteres med DOMPurify før den vises og lagres.
utføre et verktøy som ikke finnesDispatcher returnerer «Ukjent verktøy».
kalle det samme skrivende verktøyet i løkkeMaks 5 verktøyrunder per forespørsel.
gjengi personnummerSvarfilteret erstatter mønsteret. Verktøyene returnerer ikke feltet.
skrive falsk verktøysyntaks i svaretStrippes før visning. Modellen kan ikke «late som» den har utført noe — bare faktiske verktøyresultater teller.

Det gjenværende angrepsflaten er handlinger brukeren selv har rett til å utføre, utført på feil objekt fordi modellen misforsto. Det er derfor skriving i Revizo (oppgaver, matching) logges med hvem, hva og når, og kan reverseres på vanlig måte.

Kryss-tenant lekkasje​

Primærvern er applikasjonslaget: tenant_id fra sesjon i hver spørring. Dette er samme mekanisme som resten av Revizo, og AI-verktøyene bruker de samme databasehjelperne. Row Level Security i databasen er et sekundært sikkerhetsnett for Supabase Data API, ikke primærvern for applikasjonens egne spørringer. Se Databehandling og lagring → Datasegregering.

Utilsiktet rådgivning​

Regnskaps- og skatteråd fra en språkmodell er en faglig og ansvarsmessig risiko. Vi adresserer det i tre lag: instruksen forbyr det, svarfilteret fanger typiske formuleringer og legger til forbehold, og lovoppslag går mot Lovdata med kildehenvisning i stedet for modellens hukommelse. Ingen av lagene er perfekte; brukeren opplyses om at assistenten ikke gir råd.

Kostnadsløp og tilgjengelighet​

Månedskvote per organisasjon, hastighetsgrense per bruker, maks 5 verktøyrunder, maks svarlengde og 60 sekunders tidsavbrudd. Modellkall har begrenset antall gjenforsøk ved leverandørfeil. AI-chat er ikke kritisk for Revizo; faller leverandøren ut, fungerer resten av plattformen.


Revisjonsspor​

HendelseLogges somHvor
Oppgave opprettet eller endret via assistenttask.created, task.updatedOrganisasjonens hendelseslogg
Smart Match kjørt via assistentmatch.createdHendelseslogg
E-post sendt til kontakt via assistentagent.message_sent med mottakerHendelseslogg
Påminnelse opprettet eller slettetreminder.created, reminder.deletedHendelseslogg
Eksport generertexport.generatedHendelseslogg
Tripletex-skrivingtripletex.voucher.created, tripletex.invoice.created, tripletex.supplier_invoice.approvedHendelseslogg
Hvert modellkallModell, tokens, kategori, bruker, verktøy bruktai_usage_log (per tenant)
Hver samtaleMeldinger, svar, verktøy brukt, sidekontekstai_conversations (per tenant, 90 dager)

Hendelsesloggen er beskyttet mot endring og sletting på databasenivå. Se Sikkerhetsarkitektur.


Administratorens kontroller​

KontrollHvorEffekt
Slå av all AIInnstillinger → AI & Personvern → hovedbryterChat, dokumentanalyse og stemme skjules i UI og avvises på server
Slå av bare chat, dokumentanalyse eller stemmeSamme side, individuelle brytereBare den funksjonen påvirkes
Sette månedskvoteSamme sideForespørsler over kvoten avvises med 429
Bekreftelsesdialog før avslagAutomatiskViser hva som forsvinner og hva som beholdes
RollebegrensningBrukeradministrasjonLesere kan ikke bruke chat
Fjerne Lovdata eller kundetiltakPlan og markedsplassTilhørende verktøy fjernes fra katalogen

Kun administratorer kan endre AI-innstillinger.


Begrensninger vi er åpne om​

En sikkerhetsgjennomgang blir ikke bedre av at dokumentasjonen lover mer enn systemet gjør. Følgende er sant i dag:

  • Instruksjoner og regex er ikke autorisasjon. Systemprompt og svarfilter reduserer risiko for uønsket innhold, men det er verktøyenes tenant-filter og bekreftelseskortene som er sikkerhetsgrensene. Vi omtaler dem slik.
  • To e-postverktøy bekreftes i samtalen, ikke med kort. send_message_to_contact (mottaker må være registrert kontakt) og send_report_email (standard mottaker er brukeren selv). Begge logges. Kort for disse er planlagt.
  • Regnskapsskriving via Tripletex-verktøyene utføres når brukeren ber om det, uten eget bekreftelseskort. Integrasjonen er valgfri, og handlingene logges.
  • Skjermbilder brukeren limer inn sendes til Anthropic som bilde. Brukeren styrer selv hva som limes inn.
  • AI-behandling skjer utenfor EØS (Anthropic og OpenAI i USA) under EU standardkontrakter. Organisasjoner som ikke aksepterer det kan slå AI av; resten av Revizo er uberørt.
  • Hastighetsgrensen er per bruker, ikke per organisasjon. Månedskvoten er per organisasjon.
  • Vi arbeider med én felles policykontroll for alle AI-dataflyter, slik at organisasjonens AI-innstilling håndheves identisk i chat, dokumentanalyse, stemme og bakgrunnsjobber. Chat, dokumentanalyse og stemme er dekket i dag.

Ønsker dere en gjennomgang mot en konkret spørsmålsliste (CAIQ, SIG, egen mal), se Spørsmål og svar for due diligence eller ta kontakt.


Sist oppdatert: september 2026