# HU:Sch1 - Final Test ### 1. Which resources has the same origin with: `https://site.com`? - [x] https://site.com:443 - [ ] http://site.com:443 - [x] `javascript:alert(1)` from `https://site.com:443` - [ ] `about:blank` from `https://site.com:8443` - [ ] `data:text/plain,Hello` from `https://site.com` same origin учитывает схему, домен и порт. Для https 443 - порт по умолчанию. ### 2. Which resources has the same origin with page at `https://site.com` that set `document.domain = 'site.com'`? - [ ] page at `https://site.com` - [x] page at `https://site.com:8443` that set `document.domain = document.domain` - [x] page at `https://sub.site.com` that set `document.domain = 'site.com'` - [ ] page at `https://site.co` that set `document.domain = 'site.com'` После установки document.domain поддомены и ресурсы на других портах считаются тем же origin. При этом врождённый и присвоенный домен считаются разными даже если они с одинаковыми значениями. ### 3. Will this code produce preflight request? Page location: `https://site.com`. ```javascript= fetch('https://auth.site.com') ``` - [ ] Yes - [x] No Простые запросы не производят preflight. ### 4. Will this code produce preflight request? Page location: `https://site.com`. ```javascript= fetch('https://api.site.com', { method: 'POST', headers: { 'Content-Type': 'application/json' } }) ``` - [x] Yes - [ ] No Отправка json является сложным запросом, вызывающим preflight. ### 5. Will this code produce preflight request? Page location: `https://site.com`. ```javascript= fetch('https://site.com', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + TOKEN } }) ``` - [ ] Yes - [x] No Preflight отправляется только в случае с cross-origin запросами. ### 6. Server answered to preflight request with this headers. Does this allow User-Agent to make a main request with credentials? ```http HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true ... ``` - [ ] Yes - [x] No Access-Control-Allow-Origin: * запрещает присылать credentials даже при наличии соответствущего заголовка. ### 7. Which HTML snippets will NOT invoke violation due to CSP? Page origin is: `https://site.com` ```java= Content-Security-Policy: default-src 'self' https:; img-src *; frame-ancestors 'none' ``` - [x] `<img src="https://s3.img.com/12345.jpg" \>` - [x] `<script src="https://cdn.jquery.com" \>` - [x] `<iframe src="https://auth.site.com/authn">` - [ ] `<img src="/logo.jpg" onclick="reload"\>` Данная настройка CSP разрешает загружать изображения из любых источников. onclick - event handler, который блокируется. Остальное - можно загружать если используется протокол https либо тот же домен. ### 8. Which resources are "same site" with: `https://heroku.com` (eTLD)? - [x] http://heroku.com - [x] https://heroku.com:8443 - [ ] https://jack.heroku.com - [ ] https://heroku.net Same-site учитывает домен высшего уровня и одну из частей, стоящих слева (ближе всего к домену). При этом heroku.com зарегистрирован как домен высшего уровня и поэтому поддомены также берутся во внимание, из-за чего разные поддомены не считаются same-site. ### 9. When `secret` cookie will be sent? ```http HTTP/1.1 200 OK Set-Cookie: secret=...; Domain=site.com; Secure; HttpOnly ``` - [x] `<img src="https://site.com/background.jpg" \>` at `https://auth.site.com` - [ ] `<img src="https://site.com/background.jpg" \>` at `https://cite.com` - [x] when user clicks on `<a href="https://site.com/news>News</a>` at `https://habr.com/en/post/549844/` - [x] when user clicks on `<a href="https://site.com/news>News</a>` at `https://site.com/main` При переходе пользователя по ссылке секрет из куки отправляется как если бы пользователь просто зашёл на сайт. ### 10. `X-Frame-Options: SAMEORIGIN` applies to the whole chain of frames? - [ ] Yes - [ ] No - [x] Depends on browser В зависимости от браузера, это применяется либо к верхнему уровню, либо к родителям, либо ко всей цепочке. ### 11. What is `Refer` header value in request from `https://site.com/auth?token=...` to `https://cite.com`? - [ ] not sent - [x] https://site.com - [ ] https://site.com/auth?token=... По умолчанию полный путь отправляется только на тот же origin. В данном случае запрос отправляется на другой origin, так что путь в заголовке не будет указан. ### 12. What is `Refer` header value in request from `https://site.com/auth?token=...` to `http://cite.com`? - [x] not sent - [ ] https://site.com - [ ] https://site.com/auth?token=... Если исходная страница получена по https, при запросе на http этот заголовок не отправляется. ### 13. Which hashing algorithms has embedded salt generation? - [x] PBKDF2 - [x] Bcrypt - [ ] Dcrypt - [ ] SHA-1 Dcrypt не существует, а в SHA-1 не предусмотрено автоматическое соление пароля. ### 14. Which factors may be SECOND factor to password? - [ ] PIN - [ ] Security questions - [x] Software TOTP - [x] mTLS PIN и вопросы относятся к той же области, что и пароль - Something you know, в то время как TOTP и mTLS - Something you have. ### 15. Which factors may be SECOND factor to SMS? - [x] Iris scan - [x] Security questions - [ ] Hardware OTP - [ ] mTLS Аналогично предыдущему - SMS, TLS и HOTP относится к Something you have, вопросы - Something you know, а сканирование сетчатки глаза к Something you are. ### 16. Name the universal countermeasure agaist Brute Force, Credential Stuffing and Password Spraying attacks. - [x] MFA - [ ] Account lockout - [ ] CAPTCHA - [ ] Device Tokens Если злоумышленник получил доступ к авторизационным данным пользователя, наверняка от этого сможет защитить только применение второго фактора. ### 17. What is the minimum recommended amount of entropy for random session ID? - [ ] 32 bit - [x] 64 bit - [ ] Sega Mega Drive 16 bit - [ ] 128 bit 64 бита энтропии - минимально допустимая величина, но лучше не скупиться и дать 128. ### 18. What statements about RBAC and DAC entities are true? - [ ] DAC groups and RBAC roles are the same. - [x] Sometimes RBAC roles may be modelled by DAC groups. - [ ] RBAC supports data-based access control. - [x] DAC implemets more fine-grained access control. Отличие групп от ролей в том, что между ролями есть связи, а между группами нет. Всё остальное проистекает из этого различия. ### 19. Name this OAuth2 Flow. ![](https://i.imgur.com/BQ3SAcT.png) - [ ] Authorization Code Flow - [x] Implicit Flow - [ ] Resource Owner Password Credentials Grant - [ ] Client Credentials Grant Эта схема соответствует Implicit Flow. ### 20. Name this OAuth2 Flow. ![](https://i.imgur.com/LdT835Q.png) - [x] Authorization Code Flow - [ ] Implicit Flow - [ ] Resource Owner Password Credentials Grant - [ ] Client Credentials Grant Эта схема соответствует Authorization Code Flow. ### 21. Is it required for mobile application to have both `client_id` and `client_secret` for OAuth2? - [ ] Yes - [x] No Для мобильных приложений используется PKCE, в котором нет client_secret. ### 22. What is universal countermeasure against `Insufficient Redirect URI Validation`, `Credential Leakage via Referer` and `Authorization Code Injection`? - [x] Proof Key for Code Exchange - [ ] `state` validation - [ ] Usage of complete redirect URIs Использование цельных URI защищает только от Insufficient Redirect URI Validation, а state валидация используется для защиты от инъекции авторизационного кода. ### 23. Do JWT or PASETO tokens fit for stateless session management? - [ ] Yes - [x] No Отсутствует возможность инвалидировать токен без непосредственного им обладания. ### 24. Select valid statements about deserialization. - [x] Native formats usually offer more features than standardized platform agnostic ones. - [ ] Remote Code Execution vulnerabilities may arise only in the context of Native Deserialization. - [x] The main problem with deserialization is the presense of type annotations in raw data. - [ ] There is only field-based way of deserialization. Существует множество способов получить RCE, и десериализация - только один из них. ### 25. Select countermeasures against Mass Assignment. - [x] Deserialization to DTO. - [ ] Modelling structured data with non-structured data structures. - [ ] Binding to richer model. Mass Assignment подразумевает, что данные десериализуются в объект класса, в котором больше полей, чем было сериализовано. Из-за этого злоумышленник может расширить сериализованную строку и при десериализации добавленные им данные будут записаны наравне с легитимными. DTO - объект, содержащий только те поля, которые должны быть получены в данный момент времени. ### 26. How to simplify free-form text validation? - [x] Unify encoding. - [x] Apply normalization. - [ ] None of the above. Унификация используемой кодировки и избавление от недопустимых символов упрощает дальнейшую валидацию. ### 27. Does this regular expression vulnerable to ReDoS? ![](https://4wv1k4h4ec.a.trbcdn.net/userphotos/800/fbefcf6b-22e2-4b0b-90a9-abd0a78e10ed.jpg?1617362273596) - [x] Yes - [ ] No Цикл в цикле, считывающий любой символ, а потом "а" является ловушкой для жадного алгоритма, из-за чего сложность может доходить до O(n^2) ### 28. Does this regular expression vulnerable to ReDoS? ![](https://4wv1k4h4ec.a.trbcdn.net/userphotos/800/ecab4cac-bc91-4dac-8fdf-bdd92f53e58b.jpg?1617362273598) - [x] Yes - [ ] No Пробельный символ тоже подпадает под понятие "любой", то есть в данном случае переход из одного состояния в другое может быть осуществлён по двум путям, и этот переход находится в цикле. ### 29. What is the main reason of Injection vulnerabilities emergence? - [ ] Lack of input validation. - [x] Lack of context-based output encoding. Проблема заключается не в пользовательском вводе, а в результате его обработки. ### 30. Treat code at picture as template with injection point at `<INJECTION_POINT>`. Select amount of injection contexts. ```htmlembedded= <script> val session_data = "<INJECTION_POINT>"; </script> ``` - [ ] 0 - [ ] 1 - [x] 2 - [ ] 3 HTML и JavaScript. ### 31. Choose best storage location for user uploaded files. - [x] Different host - [ ] Database - [ ] Application web root С другого хоста файлы пользователя не смогут навредить приложению, даже если являются вредоносными. ### 32. Select reasons why it is required to isolate processing of complex data format documents? - [x] Used third-party libraries may have unknown vulnerabilities. - [x] Used third-party libraries typically are more powerful then required for web application. - [x] Such documents may contain malicious payloads. - [ ] None of the above. Слишком мощные библиотеки открывают злоумышленникам дополнительные возможности.