Harden Azure Key Vault trusted endpoint matching
Los mantenedores suelen responder en 2 días
@apoorvdeshmukh ya está trabajando en esto.
Desde el 13/10/2026.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
Línea de trabajo
Start by locating SqlColumnEncryptionAzureKeyVaultProvider and reading its trusted-endpoint validation and constructor behavior, then inspect the related tests. Add coverage for the listed DNS, scheme, port, normalization, and input-mutation cases; done means endpoint validation follows the requested structured rules while preserving the described compatibility path.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Is your feature request related to a problem? Please describe.
SqlColumnEncryptionAzureKeyVaultProvider validates an Azure Key Vault key URI by checking whether Uri.Host ends with one of its trusted endpoint strings. Raw suffix matching does not require a DNS-label boundary, so a hostname can match a trusted suffix without being that domain or one of its subdomains.
The trusted-endpoint representation also does not express whether an entry is an exact host, a DNS suffix, or a complete origin. This makes it difficult to apply clear scheme and port rules to application-supplied endpoints while preserving compatibility with custom Azure environments and development endpoints.
Describe the solution you'd like
Harden and clarify trusted endpoint validation:
- Match built-in domain suffixes only when the host is exactly the suffix or ends with
"." + suffix, using ordinal case-insensitive comparison. - Normalize DNS hosts consistently, including IDN and terminal-dot handling.
- Require HTTPS for built-in Azure Key Vault and Managed HSM endpoints.
- Validate and normalize application-supplied trusted endpoints when the provider is constructed.
- Provide structured semantics for custom endpoints, distinguishing exact origins from entries that intentionally include DNS subdomains.
- Defensively copy trusted endpoint collections so validation policy cannot be changed by mutating the constructor input.
- Preserve reasonable compatibility for existing custom endpoints, with diagnostics and an explicit migration path for ambiguous legacy entries.
Add tests covering:
- Valid exact hosts and subdomains.
- Lookalike suffixes that do not share a DNS-label boundary.
- Hosts that append another DNS suffix after a trusted name.
- Mixed-case, IDN, and terminal-dot hostnames.
- HTTP, HTTPS, default ports, and explicit custom ports.
- Mutation of the input trusted-endpoint array after construction.
Describe alternatives you've considered
- Keep raw
EndsWithmatching. This retains ambiguous behavior and does not accurately model DNS domain membership. - Require exact host matching for every entry. This would not work for the built-in Azure Key Vault domains, where each vault has its own subdomain.
- Immediately reject every legacy custom endpoint format. This would provide simpler rules but could unnecessarily disrupt applications using private clouds, proxies, or development services. A compatibility-conscious migration to structured endpoint rules is preferable.
Additional context
The current built-in list covers Azure Key Vault and Managed HSM domains in public and sovereign clouds. DNS-label-boundary matching should preserve valid hostnames beneath those domains while making the allowlist behavior precise.
- Lenguaje dominante
- C#
- Estrellas
- 996
- Forks
- 348
- Merge medio
- 5 d 15 h
- PR fusionados (30 d)
- 54
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de dotnet/SqlClient
-
SqlBatch.ValidateExecuteCommandBehavior XML comment says NotSupportedException but code throws ArgumentOutOfRangeExceptionPosiblemente ocupada @apoorvdeshmukh la tomó hace 4 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
dotnet/SqlClient#4823 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
Sync ExecuteReader on an STA thread deadlocks against a StateChange handler that marshals to the UI thread (OpenAsyncRetry path)Quizá libre de nuevo @mdaigle la tomó hace 28 días y no hay ningún pull request abierto. AbiertoExternal :link:
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
dotnet/SqlClient#4534 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
Tests | Additional test casesAbiertoArea\Tests
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
dotnet/SqlClient#4377 · 2 comentarios ·
Los mantenedores suelen responder en 2 días
-
Auto-Triage: Waiting for Author
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
dotnet/SqlClient#4854 · 6 comentarios ·
Los mantenedores suelen responder en 2 días
-
[7.0] Backport #4843Abierto:new: Triage Needed
Dificultad 3/5 Medio día Aptitud para principiantes 15/100
Los mantenedores suelen responder en 2 días
Todos los issues de dotnet/SqlClient
Issues similares
-
area/indexing bug package/core triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
enhancement needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
elastic/docs-builder#4495 ·
Los mantenedores suelen responder en 1 día
-
ASP.NET Core container quickstart: `docker-run: debug` task sample is missing its closing braceAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
microsoft/vscode-docs#10499 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 69/100
SourceDotNET/Source.NET#203 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día