Unable to retrieve node object in a block without access permission to said node
What you can do is impersonate another user for a while. More details here https://www.drupal.org/node/218104

At the start of the function:

$session_prev_status = drupal_save_session(); 
drupal_save_session(FALSE);
global $user;
$actual_user = $user;
$impersonated_user = user_load(1); // This will impersonate user 1, an administrator.
$user = $impersonated_user;


Then, at the end of the function:

$user = $actual_user;
drupal_save_session($session_prev_status);