2026-10-14 16:50:04 +02:00
|
|
|
# Delivery A additionally checked actual calls in Git HEAD objects (2026-10-14):
|
|
|
|
|
# p4-plugin: CredentialsHelper.lookupCredentialsInItem, P4PasswordImpl and P4TicketImpl
|
|
|
|
|
# call ConnectionFactory.testConnection, ConnectionFactory calls connect, ReviewNotifier
|
|
|
|
|
# calls openConnection; zephyr-enterprise-test-management-plugin: ZephyrInstance calls
|
|
|
|
|
# getCredentialsFromId and UserService.verifyCredentials; azure-keyvault-plugin:
|
|
|
|
|
# AzureKeyVaultGlobalConfiguration.doTestConnection calls listPropertiesOfSecrets;
|
|
|
|
|
# rocketchatnotifier-plugin: RocketChatNotifier.doTestConnection calls publish.
|
|
|
|
|
# Each listed clone is under /home/mc/ousast-results/valid/train/hist/jenkinsci__*.
|
|
|
|
|
# No network documentation lookup was performed for this delivery. The existing
|
|
|
|
|
# documented checkAnyPermission row below is retained; it was not found in these HEADs.
|
2026-10-14 09:35:16 +02:00
|
|
|
# Closed authorization facts for Jenkins/Stapler, Spring Security and Servlet code.
|
|
|
|
|
# Checked Git HEAD source objects in /home/mc/ousast-results/valid/train/hist/:
|
|
|
|
|
# jenkinsci__analysis-core-plugin: DefaultGraphConfigurationView.checkPermission,
|
|
|
|
|
# AbstractAnnotation.hasPermission and GlobalSettings.save; android-signing-plugin:
|
|
|
|
|
# SignApksBuilder.lookupCredentials; ansible-plugin: AnsibleAdHocCommandBuilder.findCredentialById;
|
|
|
|
|
# blueocean-plugin: GitScm.getItemByFullName; cloud-stats-plugin: CloudStatistics.getConfigFile;
|
|
|
|
|
# job-import-plugin: JobImportAction.updateByXml. These are real calls, not prose matches.
|
|
|
|
|
# checkAnyPermission is documented by Jenkins AccessControlled, although absent from these HEADs:
|
|
|
|
|
# https://javadoc.jenkins.io/hudson/security/AccessControlled.html
|
|
|
|
|
# checkReadPermission was not found in the clones or API references and is not guessed here.
|
|
|
|
|
# Spring and Servlet are already named in ruleset/semantic/java.toml. Their identity/check APIs:
|
|
|
|
|
# https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/acls/model/Acl.html
|
|
|
|
|
# https://docs.spring.io/spring-security/site/docs/5.4.x/reference/html5/ (Servlet integration)
|
|
|
|
|
# Calls use trailing method names. Boolean predicates are ownership_check witnesses, requiring
|
|
|
|
|
# an exit before the operation under OrderDominance; only throwing checks are path_guard facts.
|
|
|
|
|
version = "1"
|
|
|
|
|
language = "java"
|
|
|
|
|
|
|
|
|
|
[[operation]]
|
|
|
|
|
id = "jenkins-credentials-read"
|
|
|
|
|
kind = "protected_read"
|
2026-10-14 16:50:04 +02:00
|
|
|
calls = ["lookupCredentials", "lookupCredentialsInItem", "findCredentialById", "getCredentialsFromId"]
|
2026-10-14 09:35:16 +02:00
|
|
|
requires = ["path_guard", "ownership_check", "identity_constraint"]
|
|
|
|
|
sensitivity = "high"
|
|
|
|
|
|
|
|
|
|
[[operation]]
|
|
|
|
|
# A Stapler doXxx handler is not itself a protected operation; its item lookup is.
|
|
|
|
|
id = "jenkins-item-read"
|
|
|
|
|
kind = "protected_read"
|
|
|
|
|
calls = ["getItemByFullName", "getConfigFile"]
|
|
|
|
|
requires = ["path_guard", "ownership_check", "identity_constraint"]
|
|
|
|
|
sensitivity = "high"
|
|
|
|
|
|
|
|
|
|
[[operation]]
|
|
|
|
|
id = "jenkins-item-write"
|
|
|
|
|
kind = "protected_write"
|
|
|
|
|
calls = ["updateByXml", "save"]
|
|
|
|
|
requires = ["path_guard", "ownership_check", "identity_constraint"]
|
|
|
|
|
sensitivity = "high"
|
|
|
|
|
|
|
|
|
|
[[operation]]
|
|
|
|
|
# JDBC access already named in semantic/java.toml; authorization is separate from SQL escaping.
|
|
|
|
|
id = "sql-access"
|
|
|
|
|
kind = "protected_read"
|
|
|
|
|
calls = ["executeQuery", "execute", "prepareCall"]
|
|
|
|
|
requires = ["path_guard", "ownership_check", "identity_constraint"]
|
|
|
|
|
sensitivity = "high"
|
|
|
|
|
|
2026-10-14 16:50:04 +02:00
|
|
|
[[operation]]
|
|
|
|
|
id = "jenkins-outbound-connection"
|
|
|
|
|
kind = "privileged_action"
|
|
|
|
|
calls = ["testConnection", "verifyCredentials", "listPropertiesOfSecrets", "openConnection", "connect", "publish"]
|
|
|
|
|
requires = ["path_guard", "ownership_check"]
|
|
|
|
|
sensitivity = "high"
|
|
|
|
|
|
2026-10-14 09:35:16 +02:00
|
|
|
[[discharger]]
|
|
|
|
|
id = "jenkins-permission-guard"
|
|
|
|
|
kind = "path_guard"
|
|
|
|
|
calls = ["checkPermission", "checkAnyPermission"]
|
|
|
|
|
|
|
|
|
|
[[discharger]]
|
|
|
|
|
id = "permission-predicate"
|
|
|
|
|
kind = "ownership_check"
|
|
|
|
|
calls = ["hasPermission", "isGranted", "isUserInRole"]
|
|
|
|
|
|
|
|
|
|
[[discharger]]
|
|
|
|
|
# Reading the security context alone is not an authorization guard.
|
|
|
|
|
id = "identity-from-context"
|
|
|
|
|
kind = "identity_constraint"
|
|
|
|
|
identity_sources = ["SecurityContextHolder.getContext().getAuthentication()", "Jenkins.getAuthentication()", "Jenkins.getAuthentication2()", "getUserPrincipal()"]
|
|
|
|
|
request_sources = ["getParameter(", "getHeader(", "getCookies(", "getQueryString("]
|