Wednesday, July 3, 2024

Securing the CLI with OAuth2 Machine Authorization

Most corporations have sturdy exterior safety, e.g. blocking all entry to manufacturing belongings utilizing a firewall, and requiring a VPN to get “inside” entry to manufacturing environments. Nevertheless, as soon as you might be linked to the VPN, the inner programs are normally very poorly protected, and there’s little to no authentication and authorization for inner instruments and companies.

Two widespread threats to inner safety are compromised worker laptops and provide chain assaults. In these eventualities, the attacker operates behind the firewall, usually with unrestricted community entry.

Providers with an online ui may be secured utilizing an utility load balancer, e.g. an AWS ALB with OIDC, however how do you defend entry to command line interface (CLI) primarily based instruments? Requiring a username and password for each CLI invocation makes it painful to make use of and storing the credentials on the system leaves them huge open in case the pc they reside on is compromised.

The Command Line

Most inner instruments have a CLI to handle the companies which might be used throughout the firm and lots of are poorly protected. What’s one of the simplest ways to authorize CLIs? And how are you going to tie authorization into the corporate’s SSO?

One possibility is to deploy Hashicorp Vault, however that’s numerous setup and upkeep, so until you may have a group to function it, Vault won’t be a great match.

Another choice is the OAuth2 machine authorization grant (RFC8628), which is what this weblog submit will present you tips on how to use.

The OAuth 2.0 machine authorization grant is designed for Web-connected units that both lack a browser to carry out a user-agent-based authorization or are enter constrained to the extent that requiring the person to enter textual content with a view to authenticate throughout the authorization circulate is impractical. It permits OAuth shoppers on such units (like good TVs, media consoles, digital image frames, and printers) to acquire person authorization to entry protected assets by utilizing a person agent on a separate machine.

For those who ever used the AWS CLI with Single SignOn, that is what it does.

OAuth2 Machine Circulate

The Machine Authorization Circulate accommodates two totally different paths; one happens on the machine requesting authorization (the CLI) and the opposite happens in a browser. The browser circulate path, whereby a tool code is sure to the session within the browser, happens as a parallel path half within the machine circulate path.


device-5

Implementing the OAuth Machine Circulate

Now we’ll have a look at what the above sequence diagram seems to be like when it’s applied.

The inner CLI software at Rockset is named rsctl and is written in go. Step one is to provoke the machine circulate to get a JWT entry token.

$ rsctl login
Trying to mechanically open the SSO authorization web page in your default browser.
If the browser doesn't open otherwise you want to use a distinct machine to authorize this request, open the next URL:

https://rockset.auth0.com/activate?user_code=BBLF-JCWB

Then enter the code:
BBLF-JCWB

Efficiently logged in!

If you’re utilizing the CLI after logging in to a different pc, e.g. ssh:ing to a Linux server, and you utilize macOS, you’ll be able to configure iTerm to mechanically open the hyperlink utilizing a “Run command” set off.

The web page that the hyperlink takes you to seems to be like this:


Device Confirmation


After you have confirmed that the “person code” is right (matches with what the CLI exhibits), and also you click on “Affirm”, it’ll take you thru the conventional OAuth2 login process (which in our case requires a username, password and {hardware} token).

As soon as the authentication is accomplished, you may be redirected and introduced with a dialog just like the one under, and you’ll shut the browser window.


Device Confirmation


The CLI has now obtained a jwt entry token which is legitimate for a lot of hours and is used to authenticate by way of inner companies. The token may be cached on disk and reused between CLI invocations during its lifetime.

If you subject a brand new rsctl command, it’ll learn the cached Entry Token from disk, and use it to authenticate with the inner APIs.

Below the Hood

We’ve got applied and open sourced a go module to carry out the machine authorization circulate (github.com/rockset/device-authorization). It helps each Auth0 and Okta as OAuth suppliers.

Pattern Code

The next code is obtainable within the instance listing within the git repository.

Embedded content material: https://gist.github.com/pmenglund/5ed2708cdb88b6a6982258aed59a0899

We now have a JWT token, which can be utilized to authenticate REST calls by setting the Authorization header to Bearer: <jwt entry token>

Embedded content material: https://gist.github.com/pmenglund/b2ac7bb15ce25755a69573f5a063cb14

It’s now as much as the receiving finish to validate the bearer token, which may be finished utilizing an AWS ALB with OIDC authentication or a supplier particular API from the API server.

Offline Validation

Another choice for entry token validation is “offline validation”. In offline validation, the API server will get the general public key used to signal the JWT token from the supplier (and caches the general public key) and performs the validation within the API server, as a substitute of constructing a validation request to the supplier.

Residual Threat

One factor this doesn’t defend towards is an attacker with a foothold on the pc that executes the CLI. They will simply wait till the person has accomplished the authentication, and they’ll then have the ability to act because the person during the entry token.

To mitigate this threat, you’ll be able to require a one time password (OTP), e.g. a Yubikey, each time the person performs a privileged motion.

$ rsctl delete useful resource foobar
please enter yubikey OTP: ccccccvfbbcddjtuehgnfrbtublkuufbgeebklrubkhf
useful resource foobar deleted

Closing Ideas

On this weblog, we have now proven how we constructed and open-sourced a go module to safe the Command Line Interface (CLI) utilizing an OAuth2 machine authorization circulate that helps each Auth0 and Okta SSO suppliers. You possibly can add this go module to your inner instruments and cut back inner safety threats.



Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles