enhancement
major
minor
defect
critical
major
minor
major
#30144
In einer Anwendung mit modellbasierter Sicherheit sind Chat-Sitzungen für ihren Eigentümer nicht sichtbar.
Problem
tl-ai-Core definiert keine Zugriffsregeln für tl.ai.execution:AgentSession. Keiner Rolle wird eine Operation für diesen Typ gewährt, und keine Rollenregel leitet eine solche ab, nicht einmal für den Eigentümer der Sitzung. Die Abdeckungsprüfung meldet dies beim Start:
tl.ai.execution:AgentSession: Der Typ „tl.ai.execution:AgentSession“ verfügt weder über eine Rollenregel noch über eine übergeordnete Rollenregel, und keine Komposition enthält seine Objekte. ... tl.ai.execution:AgentSession: Keiner Rolle ist eine Operation auf dem Typ „tl.ai.execution:AgentSession“ oder auf einem seiner Attribute gewährt. Seine Objekte sind für jeden Benutzer unzugänglich.
In einer Anwendung mit modellbasierter Sicherheit verbirgt TL-Script jedes Objekt, das der handelnde Benutzer nicht sehen darf. Für einen Nicht-Administrator sind daher alle Sitzungen, einschließlich der eigenen, unsichtbar für:
- Referrer;
- alle(`tl.ai.execution:AgentSession)`-Objekte, deren Anzahl 0 beträgt;
- dem Ergebnis einer Skriptfunktion: chatStart(...) erstellt die Sitzung, gibt jedoch null an den aufrufenden View-Befehl zurück.
Das unter ChatConversationElement.Config#getSubject dokumentierte Muster liefert daher nichts:
$x.referers(`tl.ai.execution:AgentSession#subject`).filter(s -> $s.get(`tl.ai.execution:AgentSession#owner`) == currentUser())
Das <chat-conversation input=...> wird niemals an die Sitzung mit dem entsprechenden Betreff gebunden. Nach einem Tab-Wechsel oder einem Neuladen zeigt der Chat einen leeren neuen Chat an, obwohl die Sitzung existiert; die Java-Route /chat/sessions listet sie auf. Nach ` chatStart` wird die Antwort des Laufs in einen nicht gebundenen Bereich gestreamt, und die erste Nachricht des Benutzers wird nicht angezeigt. Eine dort eingegebene Nachricht startet eine zweite Sitzung zum gleichen Thema.
Ohne Sicherheitsmaßnahmen findet derselbe Ausdruck die Sitzung, wie ein Unit-Test bestätigt. ChatConversationControl / SessionSelection und der Client (followSelection in chat-conversation.tsx) folgen einem festgelegten Kanal korrekt.
Gefunden in der Steuerungsanwendung tl-factory (Gitea-Issue TopLogic/tl-factory#16).
Behebung
Implementierung einer Zugriffsrichtlinie für den Eigentümer der Chat-Sitzungen in tl-ai-core nach dem Muster von tl-ai-core.binarySecurity.config.xml (Rolle „AiBinaryOwner“):
- eine technische Eigentümerrolle, die vom „InitialRolesManager“ erstellt und im Bundle beschrieben wird;
- eine Referenzrollenregel für „tl.ai.execution:AgentSession“ über deren Eigentümer;
- Berechtigungen für diese Rolle auf dem Typ: Lesen und Schreiben, damit der Eigentümer eine Sitzung umbenennen und löschen kann;
- die anderen tl.ai.execution -Typen erhalten entweder die Sitzung als übergeordneten Zugriffsobjekt oder werden als intern deklariert.
Administratoren und Systemkontexte umgehen die Prüfung wie bisher.
Test
Bei aktivierter modellbasierter Sicherheit und einem Nicht-Administrator als handelndem Benutzer:
- Findet„referers“ auf einem Subjekt die eigene Sitzung des Eigentümers und nicht die eines anderen Benutzers;
- „chatStart“, das aus einem gesicherten Ansichtsskript aufgerufen wird, gibt die von ihm erstellte Sitzung zurück.