Fix/auth hardening#883
Merged
paullizer merged 3 commits intoDevelopmentfrom May 7, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
(v0.241.022)
Uploaded File Preview Body XSS Hardening (
f044)chat-input-actions.js,test_uploaded_file_preview_xss_fix.py,test_uploaded_file_preview_escaping.py,UPLOADED_FILE_PREVIEW_XSS_FIX.md)Public Workspace Tag Color XSS Hardening (
f043)functions_documents.py,route_backend_documents.py,route_backend_group_documents.py,route_backend_public_documents.py,public_workspace.js,test_public_workspace_tag_color_xss_fix.py,test_public_workspace_tag_color_rendering.py,PUBLIC_WORKSPACE_TAG_COLOR_XSS_FIX.md)Agent Template Gallery Actions Escaping (
f045)actions_to_loadvalues no longer reach the recommended-actions row through a raw HTML sink.actions_to_loadconsistently on read, create, and update flows, and invalid write payload shapes are rejected before they can persist.agent_templates_gallery.js,functions_agent_templates.py,test_agent_template_gallery_actions_to_load_xss_fix.py,test_agent_template_gallery_actions_escaping.py,AGENT_TEMPLATE_GALLERY_ACTIONS_TO_LOAD_XSS_FIX.md)Stored XSS Share, Activity, and Masking Hardening (
f022,f042, residualf037)chat-toast.js,workspace-documents-sharing.js,group-documents-sharing.js,manage_group.js,chat-messages.js,route_backend_chats.py,test_stored_xss_share_activity_and_masking_fix.py,test_document_share_modal_escaping.py,STORED_XSS_SHARE_ACTIVITY_AND_MASKING_FIX.md)Chat Scope Picker and Conversation Details XSS Hardening (
f021)javascript:links.chat-documents.js,chat-conversation-details.js,test_stored_xss_chat_scope_and_conversation_details_fix.py,test_chat_scope_lock_and_conversation_details_escaping.py,CHAT_SCOPE_LOCK_AND_CONVERSATION_DETAILS_XSS_FIX.md)Chat Citation and Uploaded File Modal Filename XSS Hardening (
f020)chat-citations.js,chat-input-actions.js,test_stored_xss_chat_modal_filename_fix.py,test_chat_modal_filename_escaping.py,CITATION_AND_FILE_MODAL_FILENAME_XSS_FIX.md)Stored XSS Agent and Member Rendering Hardening (
f009,f010)onclickhandler./api/userSearchnow escapes Microsoft Graph OData filter literals before composing the$filterexpression, so apostrophes in search input cannot break the backend Graph query.chat-messages.js,manage_public_workspace.js,manage_group.js,route_backend_users.py,test_stored_xss_chat_workspace_rendering_fix.py,test_public_workspace_member_rendering_escaping.py,test_group_workspace_member_rendering_escaping.py,STORED_XSS_AGENT_AND_MEMBER_RENDERING_FIX.md)Chat Selected Document Metadata Authorization Fix (
f046)/api/chat,/api/chat/stream, and the selected tabular document helper no longer trust caller-supplied document ids after authentication.route_backend_chats.py,test_chat_selected_document_metadata_authorization.py,test_tabular_all_scope_group_source_context.py,CHAT_SELECTED_DOCUMENT_METADATA_AUTHORIZATION_FIX.md)Control Center Public Workspace Members XSS Fix (
f008)displayNameandemailvalues were rendered into an admin-facing HTML sink.innerHTML, so malicious stored markup renders as inert text while the existing role badge styling remains unchanged.workspace-manager.js,test_control_center_public_workspace_members_escaping.py,test_stored_xss_admin_rendering_fix.py,CONTROL_CENTER_PUBLIC_WORKSPACE_MEMBERS_XSS_FIX.md)Plugin Log Recent Feed Admin Authorization Follow-Up
/api/plugins/invocations/recentnow enforces theAdminrole instead of exposing the cross-user recent invocation feed to any authenticated user.401 Unauthorized, non-admin users now receive403 Forbidden, and the admin response payload remains unchanged for legitimate troubleshooting flows.route_plugin_logging.py,test_plugin_logging_clear_logs_authorization.py,PLUGIN_LOG_RECENT_INVOCATIONS_ADMIN_FIX.md)Public Workspace Details Projection Hardening (
f034)GET /api/public_workspaces/<workspace_id>so authenticated non-members no longer receive the full public workspace Cosmos document.userRoleandisMemberfields for authorized workspace members, which preserves the manage-page UX without exposing manager lists, pending requests, or other member-only metadata.route_backend_public_workspaces.py,functions_public_workspaces.py,manage_public_workspace.js,public_directory.js,test_security_authorization_hardening.py,test_public_workspace_projection_non_member_ui.py,PUBLIC_WORKSPACE_DETAILS_DISCLOSURE_FIX.md)Approval Route Authorization Guard Consolidation (
f033)403 Forbiddenbehavior for callers who are not allowed to view or approve a request.route_backend_control_center.py,functions_approvals.py,test_security_authorization_hardening.py)Feedback Submission Ownership Enforcement (
f038)conversationIdandmessageIdvalues must resolve inside the authenticated user's own conversation before any feedback row is created.403 Forbidden, missing assistant targets now return404 Not Found, and invalid submissions no longer persist copied prompt or AI response content into the caller's feedback history.route_backend_feedback.py,test_feedback_submission_authorization.py,FEEDBACK_AND_PLUGIN_LOG_ACCESS_CONTROL_FIX.md)Plugin Log Clear Admin Authorization (
f039)401 Unauthorized, non-admin authenticated users now receive403 Forbidden, and admin behavior remains unchanged for legitimate maintenance flows.route_plugin_logging.py,test_plugin_logging_clear_logs_authorization.py,FEEDBACK_AND_PLUGIN_LOG_ACCESS_CONTROL_FIX.md)Authorization State Confusion Settings Hardening
functions_public_workspaces.py,route_backend_users.py,route_backend_public_workspaces.py,route_frontend_public_workspaces.py,route_backend_public_prompts.py,AUTHORIZATION_STATE_CONFUSION_SETTINGS_FIX.md)Key Vault Plugin Secret Scope Enforcement (
f013)functions_keyvault.py,semantic_kernel_loader.py,route_backend_plugins.py,test_keyvault_plugin_secret_scope_enforcement.py,KEY_VAULT_PLUGIN_SECRET_SCOPE_ENFORCEMENT_FIX.md)Log Analytics Query History User Scope Enforcement (
f016)user_idparameter.log_analytics_plugin.py,functions_settings.py,route_backend_control_center.py,test_log_analytics_plugin_user_scope_enforcement.py,LOG_ANALYTICS_PLUGIN_USER_SCOPE_ENFORCEMENT_FIX.md)Personal Conversation Authorization (
f025,f027)403 Forbiddenand404 Not Foundconversation-message responses explicitly, so the browser shows a controlled error state instead of assuming every message load succeeds.route_backend_conversations.py,route_backend_documents.py,route_frontend_conversations.py,chat-messages.js,test_personal_conversation_followup_authorization.py,test_chat_messages_authorization_error.py,PERSONAL_CONVERSATION_AUTHORIZATION_FOLLOW_UP_FIX.md)Personal Conversation Read Authorization Hardening
403 Forbiddeninstead of disclosing another user's transcript or image content, while the existing missing-resource response contracts remain unchanged.f024,route_backend_conversations.py,test_conversations_read_ownership_authorization.py,PERSONAL_CONVERSATION_READ_AUTHORIZATION_FIX.md)Broken Access Control IDOR Hardening
route_backend_chats.py,tabular_processing_plugin.py,fact_memory_plugin.py,test_security_authorization_hardening.py,BROKEN_ACCESS_CONTROL_IDOR_HARDENING_FIX.md)Stored XSS Admin Rendering Hardening
control_center.html,control-center.js,admin_agents.js,test_stored_xss_admin_rendering_fix.py,test_control_center_group_members_escaping.py,STORED_XSS_ADMIN_RENDERING_FIX.md)Web Search Data Egress Hardening
route_backend_chats.py,functions_settings.py,route_frontend_admin_settings.py,admin_settings.html,chats.html,test_web_search_current_message_only.py,test_web_search_notice_copy.py)Authorization Boundary Hardening Across Search, Groups, Approvals, and History Fallback
functions_search.py,functions_group.py,route_backend_users.py,route_backend_group_prompts.py,route_backend_control_center.py,route_backend_chats.py,control-center.js,test_security_authorization_hardening.py,test_control_center_public_workspace_escaping.py)