mirror of
https://github.com/openai/codex.git
synced 2026-11-13 21:30:47 +00:00
## Why Allowing a hostname must not bypass deny or review rules on its resolved IP addresses. Forwarding DNS resolution to an upstream proxy also requires checking whether those address restrictions can still be enforced. ## What changed - Add `TcpUpstreamProxy` and `set_tcp_upstream_proxy` to require a configured HTTP `CONNECT` next hop for opaque SOCKS TCP traffic. Wait for a successful response before forwarding payloads and preserve bytes read past the response headers. - Enforce resolved IP deny and review rules at direct connection time, carry destination-scoped authorization through HTTP, SOCKS, and MITM forwarding, and report blocked resolutions as policy denials. - Recognize equivalent numeric IP spellings for restrictive rules. Permit remote TCP DNS only when local binding is allowed and no deny or review pattern can restrict IP addresses; reject upstream proxy loops. - Restrict Linux proxy bridges to managed proxy environment keys and supplied loopback ports. Bound concurrent bridge workers and release them after connection failures while allowing queued responses to drain. - Add test-only Linux DNS name mapping and SOCKS relay helpers with stable synthetic addresses and validation before opening upstream connections. ## Testing Add regression coverage for CONNECT refusal and buffered tunnel data, resolved-address policy denials, approval handling across policy refreshes, equivalent IP literals, DNS mapping stability, rejected relay requests, and bridge cleanup after resets. GitOrigin-RevId: bdd6e16de3373d0eb39995f689dad0230680b99e
141 lines
5.1 KiB
Rust
141 lines
5.1 KiB
Rust
#![deny(clippy::print_stdout, clippy::print_stderr)]
|
|
|
|
mod attribution;
|
|
mod authorization_path;
|
|
mod aws_sigv4;
|
|
mod body_budget;
|
|
mod brokered_tunnel;
|
|
mod certs;
|
|
mod config;
|
|
mod connect_policy;
|
|
mod connection_lifecycle;
|
|
mod credential_broker;
|
|
mod domain_matcher;
|
|
mod environment_policy;
|
|
mod http_proxy;
|
|
mod mitm;
|
|
mod mitm_hook;
|
|
mod native_certs;
|
|
mod network_policy;
|
|
mod policy;
|
|
mod process_log_metadata;
|
|
mod proxy;
|
|
mod reasons;
|
|
mod remote_config;
|
|
mod request_cancellation;
|
|
mod request_disconnect;
|
|
mod responses;
|
|
mod runtime;
|
|
mod secret_substitution;
|
|
mod socket_path;
|
|
mod socks5;
|
|
mod state;
|
|
#[cfg(target_os = "macos")]
|
|
mod system_dns;
|
|
mod tcp_upstream;
|
|
mod upstream;
|
|
#[cfg(target_os = "windows")]
|
|
mod windows_proxy_ingress;
|
|
#[cfg(target_os = "windows")]
|
|
mod windows_tcp_attribution;
|
|
|
|
pub use attribution::PROXY_ATTRIBUTION_TOKEN_ENV_KEY;
|
|
pub use attribution::write_attribution_frame;
|
|
pub use aws_sigv4::AwsSigV4Config;
|
|
pub use aws_sigv4::ProxySecretSource;
|
|
pub use certs::CUSTOM_CA_ENV_KEYS;
|
|
pub use certs::is_managed_mitm_ca_trust_bundle_path;
|
|
pub use codex_utils_path_uri::Platform;
|
|
pub use config::NetworkDomainPermission;
|
|
pub use config::NetworkDomainPermissionEntry;
|
|
pub use config::NetworkDomainPermissions;
|
|
pub use config::NetworkMitmCaConfig;
|
|
pub use config::NetworkMode;
|
|
pub use config::NetworkProxyConfig;
|
|
pub use config::NetworkUnixSocketPermission;
|
|
pub use config::NetworkUnixSocketPermissions;
|
|
pub use config::StaticNetworkProxyConfig;
|
|
pub use config::host_and_port_from_network_addr;
|
|
pub use config::managed_proxy_ports;
|
|
pub use credential_broker::CREDENTIAL_BROKER_ACTIVE_ENV_KEY;
|
|
pub use credential_broker::CredentialAuthMethod;
|
|
pub use credential_broker::CredentialBrokerContext;
|
|
pub use credential_broker::CredentialBrokerEnvironment;
|
|
pub use credential_broker::CredentialMaskingFailureMode;
|
|
pub use credential_broker::CredentialProviderConfig;
|
|
pub use credential_broker::brokered_credential_binding_env_keys;
|
|
pub use credential_broker::brokered_credential_dummy_env_keys;
|
|
pub use credential_broker::brokered_credential_env_keys;
|
|
pub use credential_broker::brokered_credential_marker_env_keys;
|
|
pub use credential_broker::brokered_credential_value_env_keys;
|
|
pub use credential_broker::credential_broker_provider_context_env_keys;
|
|
pub use credential_broker::credential_broker_provider_sources_allowed;
|
|
pub use credential_broker::is_credential_broker_provider_env_key;
|
|
pub use environment_policy::EnvironmentNetworkPolicy;
|
|
pub use mitm_hook::InjectedHeaderConfig;
|
|
pub use mitm_hook::MitmHookActionsConfig;
|
|
pub use mitm_hook::MitmHookBodyConfig;
|
|
pub use mitm_hook::MitmHookConfig;
|
|
pub use mitm_hook::MitmHookMatchConfig;
|
|
pub use network_policy::NetworkDecision;
|
|
pub use network_policy::NetworkDecisionSource;
|
|
pub use network_policy::NetworkPolicyAuditEvent;
|
|
pub use network_policy::NetworkPolicyAuditObserver;
|
|
pub use network_policy::NetworkPolicyDecider;
|
|
pub use network_policy::NetworkPolicyDeciderFuture;
|
|
pub use network_policy::NetworkPolicyDecision;
|
|
pub use network_policy::NetworkPolicyRequest;
|
|
pub use network_policy::NetworkPolicyRequestArgs;
|
|
pub use network_policy::NetworkProtocol;
|
|
pub use policy::is_non_public_ip;
|
|
pub use policy::normalize_host;
|
|
pub use process_log_metadata::ExecutorLogIdentity;
|
|
pub use process_log_metadata::NetworkProxyProcessLogMetadata;
|
|
pub use proxy::ALL_PROXY_ENV_KEYS;
|
|
pub use proxy::ALLOW_LOCAL_BINDING_ENV_KEY;
|
|
pub use proxy::Args;
|
|
#[cfg(target_os = "macos")]
|
|
pub use proxy::CODEX_PROXY_GIT_SSH_COMMAND_MARKER;
|
|
pub use proxy::DEFAULT_NO_PROXY_VALUE;
|
|
pub use proxy::ManagedNetworkSandboxContext;
|
|
pub use proxy::ManagedProxyRouting;
|
|
pub use proxy::NO_PROXY_ENV_KEYS;
|
|
pub use proxy::NetworkProxy;
|
|
pub use proxy::NetworkProxyBuilder;
|
|
pub use proxy::NetworkProxyHandle;
|
|
pub use proxy::PROXY_ACTIVE_ENV_KEY;
|
|
pub use proxy::PROXY_ENV_KEYS;
|
|
#[cfg(target_os = "macos")]
|
|
pub use proxy::PROXY_GIT_SSH_COMMAND_ENV_KEY;
|
|
pub use proxy::PROXY_URL_ENV_KEYS;
|
|
pub use proxy::PreparedManagedNetwork;
|
|
pub use proxy::has_proxy_url_env_vars;
|
|
pub use proxy::is_managed_proxy_env_var;
|
|
pub use proxy::proxy_url_env_value;
|
|
pub use proxy::strip_managed_proxy_env;
|
|
pub use remote_config::RemoteCredentialBrokerCache;
|
|
pub use remote_config::RemoteCredentialMasking;
|
|
pub use remote_config::RemoteNetworkProxyConfig;
|
|
pub use remote_config::RemoteNetworkProxyLaunchConfig;
|
|
pub use request_cancellation::NetworkRequestCancellation;
|
|
pub use request_cancellation::NetworkRequestCancellationReason;
|
|
pub use request_disconnect::NetworkRequestDisconnect;
|
|
pub use runtime::BlockedRequest;
|
|
pub use runtime::BlockedRequestArgs;
|
|
pub use runtime::BlockedRequestObserver;
|
|
pub use runtime::BlockedRequestObserverFuture;
|
|
pub use runtime::ConfigReloader;
|
|
pub use runtime::ConfigReloaderFuture;
|
|
pub use runtime::ConfigState;
|
|
pub use runtime::LocalBindingPolicy;
|
|
pub use runtime::NetworkProxyState;
|
|
pub use secret_substitution::BodySecretReplacement;
|
|
pub use secret_substitution::BodySecretSubstitutionConfig;
|
|
pub use state::NetworkProxyAuditMetadata;
|
|
pub use state::NetworkProxyConstraintError;
|
|
pub use state::NetworkProxyConstraints;
|
|
pub use state::PartialNetworkProxyConfig;
|
|
pub use state::build_config_state;
|
|
pub use state::validate_policy_against_constraints;
|
|
pub use tcp_upstream::TcpUpstreamProxy;
|