owasp pdx may 2016 : scanning with swagger (oas) 2.0

20
Scanning APIs with OAS 2.0 (Swagger) scott davis @ethersnowman [email protected]

Upload: scott-lee-davis

Post on 16-Apr-2017

809 views

Category:

Presentations & Public Speaking


0 download

TRANSCRIPT

Page 1: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Scanning APIs with OAS 2.0 (Swagger)

scott davis@ethersnowman

[email protected]

Page 2: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Overview• The OpenAPI Specification (fka Swagger)• How Swagger/REST relates to SOAP/XML• Tools for converting to/from swagger to 'X'.• Scanning a simple RESTful JSON based API with Swagger• Swaggering the SDLC.

Page 3: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

What is the OpenAPI Specification (Swagger)• http://swagger.io/

• Starting January 1st 2016 the Swagger Specification has been donated to the Open API Initiative (OAI) and has been renamed to the OpenAPI Specification.

• https://openapis.org/

Page 4: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Field Name Type Description

swagger string Required. Specifies the Swagger Specification version being used. It can be used by the Swagger UI and other clients to interpret the API listing. The value MUST be "2.0".

info Info Object Required. Provides metadata about the API. The metadata can be used by the clients if needed.

host stringThe host (name or ip) serving the API. This MUST be the host only and does not include the scheme nor sub-paths. It MAY include a port. If the host is not included, the host serving the documentation is to be used (including the port). The host does not support path templating.

basePath stringThe base path on which the API is served, which is relative to the host. If it is not included, the API is served directly under the host. The value MUST start with a leading slash (/). The basePath does not support path templating.

schemes [string]The transfer protocol of the API. Values MUST be from the list: "http","https", "ws", "wss". If the schemes is not included, the default scheme to be used is the one used to access the Swagger definition itself.

consumes [string] A list of MIME types the APIs can consume. This is global to all APIs but can be overridden on specific API calls. Value MUST be as described under Mime Types.

produces [string] A list of MIME types the APIs can produce. This is global to all APIs but can be overridden on specific API calls. Value MUST be as described under Mime Types.

paths Paths Object Required. The available paths and operations for the API.definitions Definitions Object An object to hold data types produced and consumed by operations.

parameters Parameters Definitions Object An object to hold parameters that can be used across operations. This property does not define global parameters for all operations.

responses Responses Definitions Object An object to hold responses that can be used across operations. This propertydoes not define global responses for all operations.

securityDefinitions Security Definitions Object Security scheme definitions that can be used across the specification.

security [Security Requirement Object]A declaration of which security schemes are applied for the API as a whole. The list of values describes alternative security schemes that can be used (that is, there is a logical OR between the security requirements). Individual operations can override this definition.

tags [Tag Object]

A list of tags used by the specification with additional metadata. The order of the tags can be used to reflect on their order by the parsing tools. Not all tags that are used by the Operation Object must be declared. The tags that are not declared may be organized randomly or based on the tools' logic. Each tag name in the list MUST be unique.

externalDocs External Documentation Object Additional external documentation.

Page 5: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Where is the OpenAPI Specification (Swagger)

• Current Specification 2.0• https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md

• 3.0 (branch OpenAPI.next)• https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md

Page 6: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Who are the OpenAPI Specification Members?

Page 7: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

How Swagger/REST relates to SOAP/XML

Page 8: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

SOAP – Simple Object Access Protocol• Conceived in 1998 w/Microsoft. • Properties

• extensible, independent, decoupled

• SOAP is still used most often in the enterprise world.

Page 9: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

REST – Representational State Transfer• Introduced in 2000 by Roy Fielding for PhD• HTTP verbs (GET, POST, PUT, DELETE)

• CRUD (create, read, update, delete)

• Properties• lightweight, maintainable, and scalable.

• variety of formats: JSON, XML, GWT, …• Variety of ‘definition’ document specifications

• OAS 2.0 (swagger) ( https://openapis.org/)• RAML (RESTful API Modeling Language )• API blueprint (https://apiblueprint.org/)• …

Page 10: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

SOAP & REST

Page 11: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

SOAP has a WSDL

REST has swagger

Page 12: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

http://webscantest.com/soap/demo/api/?wsdl

Example hypothetical API: SOAP Product

Page 13: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Minimal Swagger

YAML (for humans)

JSON (for machines)

¿

Page 14: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

http://webscantest.com/rest/demo/swagger.json+

http://editor.swagger.io/#/

http://webscantest.com/rest/demo/swagger.json

Example hypothetical API: REST Product

Page 15: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Tools for converting to/from swagger to 'X'.• swagger editor

• https://github.com/swagger-api/swagger-editor• import JSON & YAML documents• online http://editor.swagger.io

• convert between versions 1.0, 1.1, 1.2, 2.0• https://github.com/swagger-api/swagger-parser

• parse and save between different versions of swagger

• swagger to/from API Blueprint • https://github.com/kminami/apib2swagger• https://github.com/apiaryio/swagger2blueprint

• swagger to/from RAML (RESTful API Modeling Language)• https://github.com/mulesoft/swagger-to-raml-object• https://www.npmjs.com/package/raml-to-swagger

Page 16: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Scanning a mobile APIMachine-In-The-Middle proxy to Attack Engine

Http Proxy

Page 17: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Scanning a simple RESTful JSON based API with Swagger

Page 18: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Swaggering the SDLC.

Page 19: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Swaggering APIs• Manually (traffic to swagger)• Code Annotations

• https://github.com/swagger-api/swagger-play

• Build with swagger• https://github.com/swagger-api/swagger-node

• Document with swagger• https://github.com/swagger-api/swagger-ui

• http://petstore.swagger.io/

• Scan with swagger• Rapid7 AppSpider

Page 20: OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0

Thank you!