Skip to content

Commit c39d543

Browse files
committed
- Schema validate against bad domain characters - Integration test for CVE POC examples - Cypress rewrite of plugins for file upload
1 parent 7c97516 commit c39d543

File tree

19 files changed

+353
-175
lines changed

19 files changed

+353
-175
lines changed

backend/schema/common.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
"uniqueItems": true,
7777
"items": {
7878
"type": "string",
79-
"pattern": "^(?:\\*\\.)?(?:[^.*]+\\.?)+[^.]$"
79+
"pattern": "^[^&| @!#%^();:/\\\\}{=+?<>,~`'\"]+$"
8080
}
8181
},
8282
"enabled": {

backend/schema/components/error.json

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "object",
3+
"description": "Error",
4+
"properties": {
5+
"error": {
6+
"$ref": "./error-object.json"
7+
}
8+
}
9+
}

backend/schema/paths/nginx/certificates/post.json

+20
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,26 @@
7272
}
7373
}
7474
}
75+
},
76+
"400": {
77+
"description": "400 response",
78+
"content": {
79+
"application/json": {
80+
"examples": {
81+
"default": {
82+
"value": {
83+
"error": {
84+
"code": 400,
85+
"message": "Domains are invalid"
86+
}
87+
}
88+
}
89+
},
90+
"schema": {
91+
"$ref": "../../../components/error.json"
92+
}
93+
}
94+
}
7595
}
7696
}
7797
}

backend/schema/paths/nginx/certificates/validate/post.json

+39
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,42 @@
5050
"certificate_key": true
5151
}
5252
}
53+
},
54+
"schema": {
55+
"type": "object",
56+
"additionalProperties": false,
57+
"required": ["certificate", "certificate_key"],
58+
"properties": {
59+
"certificate": {
60+
"type": "object",
61+
"additionalProperties": false,
62+
"required": ["cn", "issuer", "dates"],
63+
"properties": {
64+
"cn": {
65+
"type": "string"
66+
},
67+
"issuer": {
68+
"type": "string"
69+
},
70+
"dates": {
71+
"type": "object",
72+
"additionalProperties": false,
73+
"required": ["from", "to"],
74+
"properties": {
75+
"from": {
76+
"type": "integer"
77+
},
78+
"to": {
79+
"type": "integer"
80+
}
81+
}
82+
}
83+
}
84+
},
85+
"certificate_key": {
86+
"type": "boolean"
87+
}
88+
}
5389
}
5490
}
5591
}
@@ -67,6 +103,9 @@
67103
}
68104
}
69105
}
106+
},
107+
"schema": {
108+
"$ref": "../../../../components/error.json"
70109
}
71110
}
72111
}

backend/schema/paths/nginx/dead-hosts/hostID/disable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}

backend/schema/paths/nginx/dead-hosts/hostID/enable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}

backend/schema/paths/nginx/proxy-hosts/hostID/disable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}

backend/schema/paths/nginx/proxy-hosts/hostID/enable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}

backend/schema/paths/nginx/redirection-hosts/hostID/disable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}

backend/schema/paths/nginx/redirection-hosts/hostID/enable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}

backend/schema/paths/nginx/streams/streamID/disable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}

backend/schema/paths/nginx/streams/streamID/enable/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
}
5151
},
5252
"schema": {
53-
"$ref": "../../../../../components/error-object.json"
53+
"$ref": "../../../../../components/error.json"
5454
}
5555
}
5656
}
+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/// <reference types="Cypress" />
2+
3+
describe('Certificates endpoints', () => {
4+
let token;
5+
6+
before(() => {
7+
cy.getToken().then((tok) => {
8+
token = tok;
9+
});
10+
});
11+
12+
it('Validate custom certificate', function() {
13+
cy.task('backendApiPostFiles', {
14+
token: token,
15+
path: '/api/nginx/certificates/validate',
16+
files: {
17+
certificate: 'test.example.com.pem',
18+
certificate_key: 'test.example.com-key.pem',
19+
},
20+
}).then((data) => {
21+
cy.validateSwaggerSchema('post', 200, '/nginx/certificates/validate', data);
22+
expect(data).to.have.property('certificate');
23+
expect(data).to.have.property('certificate_key');
24+
});
25+
});
26+
27+
it('Request Certificate - CVE-2024-46256/CVE-2024-46257', function() {
28+
cy.task('backendApiPost', {
29+
token: token,
30+
path: '/api/nginx/certificates',
31+
data: {
32+
domain_names: ['test.com"||echo hello-world||\\\\n test.com"'],
33+
meta: {
34+
dns_challenge: false,
35+
letsencrypt_agree: true,
36+
letsencrypt_email: 'admin@example.com',
37+
},
38+
provider: 'letsencrypt',
39+
},
40+
returnOnError: true,
41+
}).then((data) => {
42+
cy.validateSwaggerSchema('post', 400, '/nginx/certificates', data);
43+
expect(data).to.have.property('error');
44+
expect(data.error).to.have.property('message');
45+
expect(data.error).to.have.property('code');
46+
expect(data.error.code).to.equal(400);
47+
expect(data.error.message).to.contain('data/domain_names/0 must match pattern');
48+
});
49+
});
50+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1n9j9C5Bes1nd
3+
qACDckERauxXVNKCnUlUM1buGBx1xc+j2e2Ar23wUJJuWBY18VfT8yqfqVDktO2w
4+
rbmvZvLuPmXePOKbIKS+XXh+2NG9L5bDG9rwGFCRXnbQj+GWCdMfzx14+CR1IHge
5+
Yz6Cv/Si2/LJPCh/CoBfM4hUQJON3lxAWrWBpdbZnKYMrxuPBRfW9OuzTbCVXToQ
6+
oxRAHiOR9081Xn1WeoKr7kVBIa5UphlvWXa12w1YmUwJu7YndnJGIavLWeNCVc7Z
7+
Eo+nS8Wr/4QWicatIWZXpVaEOPhRoeplQDxNWg5b/Q26rYoVd7PrCmRs7sVcH79X
8+
zGONeH1PAgMBAAECggEAANb3Wtwl07pCjRrMvc7WbC0xYIn82yu8/g2qtjkYUJcU
9+
ia5lQbYN7RGCS85Oc/tkq48xQEG5JQWNH8b918jDEMTrFab0aUEyYcru1q9L8PL6
10+
YHaNgZSrMrDcHcS8h0QOXNRJT5jeGkiHJaTR0irvB526tqF3knbK9yW22KTfycUe
11+
a0Z9voKn5xRk1DCbHi/nk2EpT7xnjeQeLFaTIRXbS68omkr4YGhwWm5OizoyEGZu
12+
W0Zum5BkQyMr6kor3wdxOTG97ske2rcyvvHi+ErnwL0xBv0qY0Dhe8DpuXpDezqw
13+
o72yY8h31Fu84i7sAj24YuE5Df8DozItFXQpkgbQ6QKBgQDPrufhvIFm2S/MzBdW
14+
H8JxY7CJlJPyxOvc1NIl9RczQGAQR90kx52cgIcuIGEG6/wJ/xnGfMmW40F0DnQ+
15+
N+oLgB9SFxeLkRb7s9Z/8N3uIN8JJFYcerEOiRQeN2BXEEWJ7bUThNtsVrAcKoUh
16+
ELsDmnHW/3V+GKwhd0vpk842+wKBgQDf4PGLG9PTE5tlAoyHFodJRd2RhTJQkwsU
17+
MDNjLJ+KecLv+Nl+QiJhoflG1ccqtSFlBSCG067CDQ5LV0xm3mLJ7pfJoMgjcq31
18+
qjEmX4Ls91GuVOPtbwst3yFKjsHaSoKB5fBvWRcKFpBUezM7Qcw2JP3+dQT+bQIq
19+
cMTkRWDSvQKBgQDOdCQFDjxg/lR7NQOZ1PaZe61aBz5P3pxNqa7ClvMaOsuEQ7w9
20+
vMYcdtRq8TsjA2JImbSI0TIg8gb2FQxPcYwTJKl+FICOeIwtaSg5hTtJZpnxX5LO
21+
utTaC0DZjNkTk5RdOdWA8tihyUdGqKoxJY2TVmwGe2rUEDjFB++J4inkEwKBgB6V
22+
g0nmtkxanFrzOzFlMXwgEEHF+Xaqb9QFNa/xs6XeNnREAapO7JV75Cr6H2hFMFe1
23+
mJjyqCgYUoCWX3iaHtLJRnEkBtNY4kzyQB6m46LtsnnnXO/dwKA2oDyoPfFNRoDq
24+
YatEd3JIXNU9s2T/+x7WdOBjKhh72dTkbPFmTPDdAoGAU6rlPBevqOFdObYxdPq8
25+
EQWu44xqky3Mf5sBpOwtu6rqCYuziLiN7K4sjN5GD5mb1cEU+oS92ZiNcUQ7MFXk
26+
8yTYZ7U0VcXyAcpYreWwE8thmb0BohJBr+Mp3wLTx32x0HKdO6vpUa0d35LUTUmM
27+
RrKmPK/msHKK/sVHiL+NFqo=
28+
-----END PRIVATE KEY-----
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEYDCCAsigAwIBAgIRAPoSC0hvitb26ODMlsH6YbowDQYJKoZIhvcNAQELBQAw
3+
gZExHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEzMDEGA1UECwwqamN1
4+
cm5vd0BKYW1pZXMtTGFwdG9wLmxvY2FsIChKYW1pZSBDdXJub3cpMTowOAYDVQQD
5+
DDFta2NlcnQgamN1cm5vd0BKYW1pZXMtTGFwdG9wLmxvY2FsIChKYW1pZSBDdXJu
6+
b3cpMB4XDTI0MTAwOTA3MjIxN1oXDTI3MDEwOTA3MjIxN1owXjEnMCUGA1UEChMe
7+
bWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMTMwMQYDVQQLDCpqY3Vybm93
8+
QEphbWllcy1MYXB0b3AubG9jYWwgKEphbWllIEN1cm5vdykwggEiMA0GCSqGSIb3
9+
DQEBAQUAA4IBDwAwggEKAoIBAQC1n9j9C5Bes1ndqACDckERauxXVNKCnUlUM1bu
10+
GBx1xc+j2e2Ar23wUJJuWBY18VfT8yqfqVDktO2wrbmvZvLuPmXePOKbIKS+XXh+
11+
2NG9L5bDG9rwGFCRXnbQj+GWCdMfzx14+CR1IHgeYz6Cv/Si2/LJPCh/CoBfM4hU
12+
QJON3lxAWrWBpdbZnKYMrxuPBRfW9OuzTbCVXToQoxRAHiOR9081Xn1WeoKr7kVB
13+
Ia5UphlvWXa12w1YmUwJu7YndnJGIavLWeNCVc7ZEo+nS8Wr/4QWicatIWZXpVaE
14+
OPhRoeplQDxNWg5b/Q26rYoVd7PrCmRs7sVcH79XzGONeH1PAgMBAAGjZTBjMA4G
15+
A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAfBgNVHSMEGDAWgBSB
16+
/vfmBUd4W7CvyEMl7YpMVQs8vTAbBgNVHREEFDASghB0ZXN0LmV4YW1wbGUuY29t
17+
MA0GCSqGSIb3DQEBCwUAA4IBgQASwON/jPAHzcARSenY0ZGY1m5OVTYoQ/JWH0oy
18+
l8SyFCQFEXt7UHDD/eTtLT0vMyc190nP57P8lTnZGf7hSinZz1B1d6V4cmzxpk0s
19+
VXZT+irL6bJVJoMBHRpllKAhGULIo33baTrWFKA0oBuWx4AevSWKcLW5j87kEawn
20+
ATCuMQ1I3ifR1mSlB7X8fb+vF+571q0NGuB3a42j6rdtXJ6SmH4+9B4qO0sfHDNt
21+
IImpLCH/tycDpcYrGSCn1QrekFG1bSEh+Bb9i8rqMDSDsYrTFPZTuOQ3EtjGni9u
22+
m+rEP3OyJg+md8c+0LVP7/UU4QWWnw3/Wolo5kSCxE8vNTFqi4GhVbdLnUtcIdTV
23+
XxuR6cKyW87Snj1a0nG76ZLclt/akxDhtzqeV60BO0p8pmiev8frp+E94wFNYCmp
24+
1cr3CnMEGRaficLSDFC6EBENzlZW2BQT6OMIV+g0NBgSyQe39s2zcdEl5+SzDVuw
25+
hp8bJUp/QN7pnOVCDbjTQ+HVMXw=
26+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)