fix: mitigate "sequential @import chaining" vulnerability (#5616)
* `test/e2e-cypress/tests/features/xss/` -> `test/e2e-cypress/tests/security` * add tests * filter <style> tags out of Markdown fields * initialize OAuth inputs without applying `value` attribute
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
describe("XSS: OAuth2 authorizationUrl sanitization", () => {
|
||||
it("should filter out a javascript URL", () => {
|
||||
cy.visit("/?url=/documents/xss/oauth2.yaml")
|
||||
cy.visit("/?url=/documents/security/xss-oauth2.yaml")
|
||||
.window()
|
||||
.then(win => {
|
||||
let args = null
|
||||
@@ -0,0 +1,58 @@
|
||||
describe("Security: CSS Sequential Import Chaining", () => {
|
||||
describe("in OpenAPI 3.0", () => {
|
||||
describe("CSS Injection via Markdown", () => {
|
||||
it("should filter <style> tags out of Markdown fields", () => {
|
||||
cy.visit("/?url=/documents/security/sequential-import-chaining/openapi.yaml")
|
||||
.get("div.information-container")
|
||||
.should("exist")
|
||||
.and("not.have.descendants", "style")
|
||||
})
|
||||
it("should not apply `@import`ed CSS stylesheets", () => {
|
||||
cy.visit("/?url=/documents/security/sequential-import-chaining/openapi.yaml")
|
||||
.wait(500) // HACK: wait for CSS import to settle
|
||||
.get("div.info h4")
|
||||
.should("have.length", 1)
|
||||
.and("not.be.hidden")
|
||||
})
|
||||
})
|
||||
describe("Value Exfiltration via CSS", () => {
|
||||
it("should not allow OAuth credentials to be visible via HTML `value` attribute", () => {
|
||||
cy.visit("/?url=/documents/petstore-expanded.openapi.yaml")
|
||||
.get(".scheme-container > .schemes > .auth-wrapper > .btn > span")
|
||||
.click()
|
||||
.get("div > div > .wrapper > .block-tablet > #client_id")
|
||||
.clear()
|
||||
.type("abc")
|
||||
.should("not.have.attr", "value", "abc")
|
||||
})
|
||||
})
|
||||
})
|
||||
describe("in Swagger 2.0", () => {
|
||||
describe("CSS Injection via Markdown", () => {
|
||||
it("should filter <style> tags out of Markdown fields", () => {
|
||||
cy.visit("/?url=/documents/security/sequential-import-chaining/swagger.yaml")
|
||||
.get("div.information-container")
|
||||
.should("exist")
|
||||
.and("not.have.descendants", "style")
|
||||
})
|
||||
it("should not apply `@import`ed CSS stylesheets", () => {
|
||||
cy.visit("/?url=/documents/security/sequential-import-chaining/swagger.yaml")
|
||||
.wait(500) // HACK: wait for CSS import to settle
|
||||
.get("div.info h4")
|
||||
.should("have.length", 1)
|
||||
.and("not.be.hidden")
|
||||
})
|
||||
})
|
||||
describe("Value Exfiltration via CSS", () => {
|
||||
it("should not allow OAuth credentials to be visible via HTML `value` attribute", () => {
|
||||
cy.visit("/?url=/documents/petstore.swagger.yaml")
|
||||
.get(".scheme-container > .schemes > .auth-wrapper > .btn > span")
|
||||
.click()
|
||||
.get("div > div > .wrapper > .block-tablet > #client_id")
|
||||
.clear()
|
||||
.type("abc")
|
||||
.should("not.have.attr", "value", "abc")
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user