Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
e5945c2d
Commit
e5945c2d
authored
Oct 09, 2018
by
Jake Sanders
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
account for disabled legacy metadata endpoints
Signed-off-by:
Jake Sanders
<
jsand@google.com
>
parent
830e09cc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
44 additions
and
17 deletions
+44
-17
check_metadata_concealment.go
...images/metadata-concealment/check_metadata_concealment.go
+44
-17
No files found.
test/images/metadata-concealment/check_metadata_concealment.go
View file @
e5945c2d
...
@@ -32,23 +32,28 @@ var (
...
@@ -32,23 +32,28 @@ var (
"http://metadata.google.internal"
,
"http://metadata.google.internal"
,
"http://169.254.169.254/"
,
"http://169.254.169.254/"
,
"http://metadata.google.internal/"
,
"http://metadata.google.internal/"
,
"http://metadata.google.internal/computeMetadata"
,
"http://metadata.google.internal/computeMetadata/v1"
,
// Allowed API versions.
"http://metadata.google.internal/computeMetadata/v1/"
,
// Service account token endpoints.
"http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"
,
// Params that contain 'recursive' as substring.
"http://metadata.google.internal/computeMetadata/v1/instance/?nonrecursive=true"
,
"http://metadata.google.internal/computeMetadata/v1/instance/?something=other&nonrecursive=true"
,
}
legacySuccessEndpoints
=
[]
string
{
// Discovery
"http://metadata.google.internal/0.1"
,
"http://metadata.google.internal/0.1"
,
"http://metadata.google.internal/0.1/"
,
"http://metadata.google.internal/0.1/"
,
"http://metadata.google.internal/0.1/meta-data"
,
"http://metadata.google.internal/0.1/meta-data"
,
"http://metadata.google.internal/computeMetadata"
,
"http://metadata.google.internal/computeMetadata/v1beta1"
,
"http://metadata.google.internal/computeMetadata/v1beta1"
,
"http://metadata.google.internal/computeMetadata/v1"
,
// Allowed API versions.
// Allowed API versions.
"http://metadata.google.internal/0.1/meta-data/"
,
"http://metadata.google.internal/0.1/meta-data/"
,
"http://metadata.google.internal/computeMetadata/v1beta1/"
,
"http://metadata.google.internal/computeMetadata/v1beta1/"
,
"http://metadata.google.internal/computeMetadata/v1/"
,
// Service account token endpoints.
// Service account token endpoints.
"http://metadata.google.internal/0.1/meta-data/service-accounts/default/acquire"
,
"http://metadata.google.internal/0.1/meta-data/service-accounts/default/acquire"
,
"http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token"
,
"http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token"
,
"http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"
,
// Params that contain 'recursive' as substring.
"http://metadata.google.internal/computeMetadata/v1/instance/?nonrecursive=true"
,
"http://metadata.google.internal/computeMetadata/v1/instance/?something=other&nonrecursive=true"
,
}
}
noKubeEnvEndpoints
=
[]
string
{
noKubeEnvEndpoints
=
[]
string
{
// Check that these don't get a recursive result.
// Check that these don't get a recursive result.
...
@@ -85,19 +90,31 @@ func main() {
...
@@ -85,19 +90,31 @@ func main() {
"Metadata-Flavor"
:
{
"Google"
},
"Metadata-Flavor"
:
{
"Google"
},
}
}
for
_
,
e
:=
range
successEndpoints
{
for
_
,
e
:=
range
successEndpoints
{
if
err
:=
checkURL
(
e
,
h
,
200
,
""
);
err
!=
nil
{
if
err
:=
checkURL
(
e
,
h
,
200
,
""
,
""
);
err
!=
nil
{
log
.
Printf
(
"Wrong response for %v: %v"
,
e
,
err
)
log
.
Printf
(
"Wrong response for %v: %v"
,
e
,
err
)
success
=
1
success
=
1
}
}
}
}
for
_
,
e
:=
range
noKubeEnvEndpoints
{
for
_
,
e
:=
range
noKubeEnvEndpoints
{
if
err
:=
checkURL
(
e
,
h
,
200
,
"kube-env"
);
err
!=
nil
{
if
err
:=
checkURL
(
e
,
h
,
200
,
"
"
,
"
kube-env"
);
err
!=
nil
{
log
.
Printf
(
"Wrong response for %v: %v"
,
e
,
err
)
log
.
Printf
(
"Wrong response for %v: %v"
,
e
,
err
)
success
=
1
success
=
1
}
}
}
}
for
_
,
e
:=
range
failureEndpoints
{
for
_
,
e
:=
range
failureEndpoints
{
if
err
:=
checkURL
(
e
,
h
,
403
,
""
);
err
!=
nil
{
if
err
:=
checkURL
(
e
,
h
,
403
,
""
,
""
);
err
!=
nil
{
log
.
Printf
(
"Wrong response for %v: %v"
,
e
,
err
)
success
=
1
}
}
legacyEndpointExpectedStatus
:=
200
if
err
:=
checkURL
(
"http://metadata.google.internal/computeMetadata/v1/instance/attributes/disable-legacy-endpoints"
,
h
,
200
,
"true"
,
""
);
err
==
nil
{
// If `disable-legacy-endpoints` is set to true, queries to unconcealed legacy endpoints will return a 403.
legacyEndpointExpectedStatus
=
403
}
for
_
,
e
:=
range
legacySuccessEndpoints
{
if
err
:=
checkURL
(
e
,
h
,
legacyEndpointExpectedStatus
,
""
,
""
);
err
!=
nil
{
log
.
Printf
(
"Wrong response for %v: %v"
,
e
,
err
)
log
.
Printf
(
"Wrong response for %v: %v"
,
e
,
err
)
success
=
1
success
=
1
}
}
...
@@ -108,7 +125,7 @@ func main() {
...
@@ -108,7 +125,7 @@ func main() {
}
}
// Check that success endpoints fail if X-Forwarded-For is present.
// Check that success endpoints fail if X-Forwarded-For is present.
for
_
,
e
:=
range
successEndpoints
{
for
_
,
e
:=
range
successEndpoints
{
if
err
:=
checkURL
(
e
,
xForwardedForHeader
,
403
,
""
);
err
!=
nil
{
if
err
:=
checkURL
(
e
,
xForwardedForHeader
,
403
,
""
,
""
);
err
!=
nil
{
log
.
Printf
(
"Wrong response for %v with X-Forwarded-For: %v"
,
e
,
err
)
log
.
Printf
(
"Wrong response for %v with X-Forwarded-For: %v"
,
e
,
err
)
success
=
1
success
=
1
}
}
...
@@ -116,9 +133,10 @@ func main() {
...
@@ -116,9 +133,10 @@ func main() {
os
.
Exit
(
success
)
os
.
Exit
(
success
)
}
}
// Checks that a URL with the given headers returns the right code, and if s is
// Checks that a URL with the given headers returns the right code.
// non-empty, checks that the body doesn't contain s.
// If expectedToContain is non-empty, checks that the body contains expectedToContain.
func
checkURL
(
url
string
,
header
http
.
Header
,
expectedStatus
int
,
s
string
)
error
{
// Similarly, if expectedToNotContain is non-empty, checks that the body doesn't contain expectedToNotContain.
func
checkURL
(
url
string
,
header
http
.
Header
,
expectedStatus
int
,
expectedToContain
,
expectedToNotContain
string
)
error
{
client
:=
&
http
.
Client
{}
client
:=
&
http
.
Client
{}
req
,
err
:=
http
.
NewRequest
(
"GET"
,
url
,
nil
)
req
,
err
:=
http
.
NewRequest
(
"GET"
,
url
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -137,13 +155,22 @@ func checkURL(url string, header http.Header, expectedStatus int, s string) erro
...
@@ -137,13 +155,22 @@ func checkURL(url string, header http.Header, expectedStatus int, s string) erro
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
if
s
!=
""
{
if
expectedToContain
!=
""
{
matched
,
err
:=
regexp
.
Match
(
s
,
body
)
matched
,
err
:=
regexp
.
Match
(
expectedToContain
,
body
)
if
err
!=
nil
{
return
err
}
if
!
matched
{
return
fmt
.
Errorf
(
"body didn't contain %q: got %v"
,
expectedToContain
,
string
(
body
))
}
}
if
expectedToNotContain
!=
""
{
matched
,
err
:=
regexp
.
Match
(
expectedToNotContain
,
body
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
if
matched
{
if
matched
{
return
fmt
.
Errorf
(
"body incorrectly contained %q: got %v"
,
s
,
string
(
body
))
return
fmt
.
Errorf
(
"body incorrectly contained %q: got %v"
,
expectedToNotContain
,
string
(
body
))
}
}
}
}
return
nil
return
nil
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment