mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 10:25:42 +03:00
artifact: fix numerous go-getter security issues
Fix numerous go-getter security issues: - Add timeouts to http, git, and hg operations to prevent DoS - Add size limit to http to prevent resource exhaustion - Disable following symlinks in both artifacts and `job run` - Stop performing initial HEAD request to avoid file corruption on retries and DoS opportunities. **Approach** Since Nomad has no ability to differentiate a DoS-via-large-artifact vs a legitimate workload, all of the new limits are configurable at the client agent level. The max size of HTTP downloads is also exposed as a node attribute so that if some workloads have large artifacts they can specify a high limit in their jobspecs. In the future all of this plumbing could be extended to enable/disable specific getters or artifact downloading entirely on a per-node basis.
This commit is contained in:
committed by
Luiz Aoqui
parent
94abe338e9
commit
3968509886
@@ -244,6 +244,9 @@ type TaskRunner struct {
|
||||
// serviceRegWrapper is the handler wrapper that is used by service hooks
|
||||
// to perform service and check registration and deregistration.
|
||||
serviceRegWrapper *wrapper.HandlerWrapper
|
||||
|
||||
// getter is an interface for retrieving artifacts.
|
||||
getter cinterfaces.ArtifactGetter
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
@@ -309,6 +312,9 @@ type Config struct {
|
||||
// ServiceRegWrapper is the handler wrapper that is used by service hooks
|
||||
// to perform service and check registration and deregistration.
|
||||
ServiceRegWrapper *wrapper.HandlerWrapper
|
||||
|
||||
// Getter is an interface for retrieving artifacts.
|
||||
Getter cinterfaces.ArtifactGetter
|
||||
}
|
||||
|
||||
func NewTaskRunner(config *Config) (*TaskRunner, error) {
|
||||
@@ -367,6 +373,7 @@ func NewTaskRunner(config *Config) (*TaskRunner, error) {
|
||||
shutdownDelayCtx: config.ShutdownDelayCtx,
|
||||
shutdownDelayCancelFn: config.ShutdownDelayCancelFn,
|
||||
serviceRegWrapper: config.ServiceRegWrapper,
|
||||
getter: config.Getter,
|
||||
}
|
||||
|
||||
// Create the logger based on the allocation ID
|
||||
|
||||
Reference in New Issue
Block a user