La seguridad de un software no es un software de seguridad. Nos preocupamos de cuestiones como la autenticación, el control de acceso, la confidencialidad, la criptografía y la gestión de privilegios.
NSURLConnection
, un objeto NSURLSession
o un objeto NSURLDownload
evaluar la cadena de confianza. NSURLCredential
mediante una credencial de confianza del servidor no evaluada:
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * credential)) completionHandler {
...
[challenge.sender useCredential:[NSURLCredential credentialForTrust: challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
...
}
NSURLConnection
, un objeto NSURLSession
o un objeto NSURLDownload
evaluar la cadena de confianza. NSURLCredential
mediante una credencial de confianza del servidor no evaluada:
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
...
let cred = URLCredential(user: "foo", password: "bar", persistence: .none)
let trust = challenge.protectionSpace.serverTrust
let cred = URLCredential(trust:trust!)
...
}
NSURLConnection
, objeto NSURLSession
o un objeto NSURLDownload
evaluar la confianza del servidor. Para poder evaluar la confianza del servidor, debe llamarse al método SecTrustEvaluate(_:_:)
con la confianza obtenida del método serverTrust
del objeto del servidor NSURLProtectionSpace
. SecTrustEvaluate(_:_:)
devuelve dos valores diferentes:OSStatus
devuelto representa el código de resultado.cancel(_:)
.
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
SecTrustResultType result = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &result);
completionHandler(NSURLSessionAuthChallengeUseCredential, [challenge proposedCredential]);
NSURLConnection
, objeto NSURLSession
o un objeto NSURLDownload
evaluar la confianza del servidor. Para poder evaluar la confianza del servidor, debe llamarse al método SecTrustEvaluate(_:_:)
con la confianza obtenida del método serverTrust
del objeto del servidor NSURLProtectionSpace
. SecTrustEvaluate(_:_:)
devuelve dos valores diferentes:OSStatus
devuelto representa el código de resultado.cancel(_:)
.
let trust = challenge.protectionSpace.serverTrust
var result = SecTrustResultType.invalid
let status = SecTrustEvaluate(trust!,&secresult)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, challenge.proposedCredential)
NSURLConnection
trata los desafíos de autenticación sin antes verificar que la aplicación sabe cómo manejar el desafío de autenticación para un espacio de protección en concreto.NSURLProtectionSpace
representa un servidor o un área de un servidor, denominado comúnmente dominio, que requiere autenticación.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
se llamará justo antes de llamar al método NSURLConnectionDelegate.connection(_:didReceive:)
que debe realizar la autenticación. Esto permite que NSURLConnectionDelegate
inspeccione el espacio de información antes de intentar la autenticación. Al devolver true
, el delegado indica que puede manejar el formulario de autenticación, lo que hace en la llamada subsiguiente a connection(_:didReceive:)
. Si su delegado no implementa este método y el espacio de protección utiliza la autenticación del certificado de cliente o la autenticación de confianza del servidor, el sistema intentará utilizar las llaves del usuario para realizar la autenticación, lo cual puede no ser el comportamiento deseado.NSURLConnection
trata los desafíos de autenticación sin antes verificar que la aplicación sabe cómo manejar el desafío de autenticación para un espacio de protección en concreto.NSURLProtectionSpace
representa un servidor o un área de un servidor, denominado comúnmente dominio, que requiere autenticación.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
se llamará justo antes de llamar al método NSURLConnectionDelegate.connection(_:didReceive:)
que debe realizar la autenticación. Esto permite que NSURLConnectionDelegate
inspeccione el espacio de información antes de intentar la autenticación. Al devolver true
, el delegado indica que puede manejar el formulario de autenticación, lo que hace en la llamada subsiguiente a connection(_:didReceive:)
. Si su delegado no implementa este método y el espacio de protección utiliza la autenticación del certificado de cliente o la autenticación de confianza del servidor, el sistema intentará utilizar las llaves del usuario para realizar la autenticación, lo cual puede no ser el comportamiento deseado.NSURLConnection
o NSURLSession
falla al comprobar cuál es el host al que se envían las credenciales.NSURLConnection
o NSURLSession
para tratar solicitudes de autenticación. Si olvida comprobar que la solicitud de autenticación proviene del host esperado, las credenciales se enviarán a todas las URL que cargue la aplicación. Además, si no verifica que las credenciales se pueden enviar de forma segura, las credenciales serán susceptibles de ser robadas.
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NS URLAuthenticationChallenge *)challenge completionHandler:(void (^)(NS URLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {
NSString *user = [self getUser];
NSString *pass = [self getPassword];
NSURLCredential *cred = [NSURLCredential credentialWithUser:user
password:pass persistence:NSURLCredentialPersistenceForSession];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}
NSURLConnection
o NSURLSession
falla al comprobar cuál es el host al que se envían las credenciales.NSURLConnection
o NSURLSession
para tratar solicitudes de autenticación. Si olvida comprobar que la solicitud de autenticación proviene del host esperado, las credenciales se enviarán a todas las URL que cargue la aplicación. Además, si no verifica que las credenciales se pueden enviar de forma segura, las credenciales serán susceptibles de ser robadas.
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
let user = getUser()
let pass = getPassword()
let credential = URLCredential(user: user, password: pass, persistence: .none)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, credential)
}
tx.origin
con fines de autorización.tx.origin
contiene la dirección de la cuenta desde donde se origina una transacción.tx.origin
contiene la dirección de la cuenta, A1, utilizada para llamar a S1. Si la intención de tx.origin
es verificar la autorización de A1, esta autorización se elude.tx.origin
, entonces tx.origin
contendrá la dirección de la cuenta de usuario que inició la transacción y se eludirá la autorización.tx.origin
antes de transferir fondos a una dirección proporcionada.sendTo
en el contrato vulnerable, la condición dentro de la declaración require
será verdadera y los fondos se transferirán a cualquier dirección que el contrato del atacante haya especificado al llamar a sendTo
.
function sendTo(address receiver, uint amount) public {
require(tx.origin == owner);
receiver.transfer(amount);
}
0.0.0.0/0
) el puerto TCP22
, donde un servidor SSH suele responder a las solicitudes de conexión entrantes.
- name: Task to open SSH port
amazon.aws.ec2_group:
name: demo_security_group
description: Open the ssh port to the world
state: present
vpc_id: 123456
region: us-west-1
rules:
- proto: tcp
ports: 22
cidr_ip: 0.0.0.0/0
- name: Create Lambda policy statement for S3 event notification
community.aws.lambda_policy:
action: lambda:InvokeFunction
function_name: functionName
principal: *
statement_id: lambda-s3-demobucket-access-log
source_arn: arn:aws:s3:us-west-2:123456789012:demobucket
source_account: 123456789012
state: present